[6.0] Fix request cycle in macro expansion mangling #74299
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
6.0 cherry-pick of #74201
Description: Expanding a macro inside a local function with autoclosures would attempt to assign discriminators before the autoclosures had been formed. As a result, SILGen would emit autoclosures with duplicate symbol names. This would either cause a silent miscompile or diagnose an error about mismatched SIL function types. This PR changes the macro expansion buffer mangling to use the source location of the expansion instead. This avoids evaluating requests before everything has been type checked.
Origination: This never worked, but it's become more common now that the
with.*Continuation
functions have a default argument that expands the#isolation
macro. These APIs are often used with local functions.Radar: Fixes rdar://127078338.
Risk: Low. However, to avoid silent miscompiles in the future, this converts the absence of a discriminator into a fatal error. This is a major invariant violation which should always be flagged, even in noassert builds.
Reviewed by: @DougGregor