-
Notifications
You must be signed in to change notification settings - Fork 10.6k
[GSB] Delay requirements on recursive types #8714
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
|
Go, Doug! |
…vedType. Teach addInheritedRequirements() to take an UnresolvedType, so the requirements it adds can be delayed if needed. More importantly, teach the primary caller (addConformanceRequirement) not to use getNestedType directly; instead, form an appropriate Type and let the type-resolution machinery handle it.
Rather than detecting recursion and bailing early, delay requirements that would form recursive types. Note that we aren't actually processing them later.
Recursive protocol conformances still aren't functional, so reinstate some checking for recursive protocol conformances. It doesn't catch everything that the previous version did---but we don't crash on such cases anymore, either.
Now that we detect recursion based on repetition within the potential archetypes, we no longer rely on passing down "visited" sets to detect/diagnose recursion. Remove them.
25b2476 to
54f132c
Compare
|
@swift-ci please smoke test and merge |
1 similar comment
|
@swift-ci please smoke test and merge |
|
@swift-ci please smoke test Linux |
|
LLDB failure. Ugh. |
|
@swift-ci please smoke test Linux |
|
patched up the LLDB issue... |
|
@swift-ci please smoke test Linux |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Delaying requirements that form new, recursively-defined types, providing an alternative to the current detect-recursion-complain-and-bail approach that bans recursive protocol requirements entirely. This is along the path toward recursive protocol conformances (which would require us to reprocess those requirements when we need to later), and eliminates some extraneous bookkeeping in the
GenericSignatureBuilder.