[Availability] Lazily expand type refinement contexts for extensions. #71365
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.
When resolving an attached macro, the constraint system needs to check whether a potential macro candidate is available in the current context. That triggers building a type refinement context, and when the macro is applied at the top-level, building the type refinement context needs to resolve extensions because extensions get their availability from the extended type. However, if the extended type is nested inside another type that has attached macros, those macros must be expanded to produce any member types that might be added by the macro. This leads to circularity errors that cannot be resolved.
This change opts extension declarations into lazily building a TRC to avoid needing to resolve the extended type while building a type refinement context to check availability at an unrelated source location in the same file.
Resolves rdar://115851283