Skip to content

Conversation

hamishknight
Copy link
Contributor

@hamishknight hamishknight commented Oct 7, 2025

Record when we encounter a request cycle, and enforce that the outer step of the cycle also returns the default value. This fixes a couple of crashers where we were ending up with conflicting values depending on whether the request was queried from within the cycle or from outside it. This also allows us to flatten recursive ErrorTypes, which were previously load-bearing.

To help avoid additional downstream diagnostics for recursive generic signature computation, this PR also changes the placeholder generic signature logic to use same-type ErrorType requirements, and adds a checks to avoid downstream diagnostics in type resolution and conformance checking.

Resolves #57045

@hamishknight
Copy link
Contributor Author

@swift-ci please test

@hamishknight
Copy link
Contributor Author

@swift-ci please SourceKit stress test

Factor out the common logic from `getPlaceholderGenericSignature`.
Avoid conformance failures and member lookup errors for generic
signatures with invalid same-type requirements.
This helps avoid producing more downstream errors. This changes
`GenericSignature::forInvalid` to produce the same signature as e.g
`<T where T == Undefined>`. This subsumes the need to introduce
conformance requirements for invertible protocols.
Record when we encounter a request cycle, and enforce that the outer
step of the cycle also returns the default value. This fixes a couple
of crashers where we were ending up with conflicting values depending
on whether the request was queried from within the cycle or from
outside it.
Remove the now-unnecessary hack where we could build recursive
ErrorTypes.
Avoid type-checking the `where` clause when computing the interface
type of a variable bound in the pattern of the loop as otherwise that
will trigger cycles and give us an ErrorType result.
@hamishknight
Copy link
Contributor Author

@swift-ci please smoke test

@hamishknight
Copy link
Contributor Author

@swift-ci please SourceKit stress test

@hamishknight hamishknight merged commit a83ea3c into swiftlang:main Oct 9, 2025
3 of 4 checks passed
@hamishknight hamishknight deleted the fishmonger branch October 9, 2025 16:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants