Skip to content
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

Ncgenerics test fixes kavon v7 #71515

Merged
merged 7 commits into from
Feb 10, 2024

Conversation

kavon
Copy link
Member

@kavon kavon commented Feb 9, 2024

more test fixes

kavon added 3 commits February 9, 2024 11:14
In some cases we get a `ConstraintKind::SelfObjectOfProtocol` here.
That's typically for an existential cast. In such a case, we actually
get a better standard diagnostic than what MustBeCopyable can produce
currently. So this change narrows things to what MustBeCopyable is
better at diagnosing.
@kavon
Copy link
Member Author

kavon commented Feb 9, 2024

@swift-ci smoke test

@kavon kavon requested review from hamishknight and slavapestov and removed request for xedin, slavapestov, hborla, AnthonyLatsis and hamishknight February 9, 2024 20:46
@kavon kavon enabled auto-merge February 9, 2024 20:47
kavon and others added 4 commits February 9, 2024 15:46
`Any` now implies the requirements `Copyable & Escapable`. Check it like
 any ordinary existential.
Previously, if a request R evaluated itself N times, we would emit N
"circular reference" diagnostics. These add no value, so instead let's
cache the user-provided default value on the first circular evaluation.

This changes things slightly so that instead of returning an
llvm::Expected<Request::OutputType>, various evaluator methods take
a callback which can produce the default value.

The existing evaluateOrDefault() interface is unchanged, and a new
evaluateOrFatal() entry point replaces
llvm::cantFail(ctx.evaluator(...)).

Direct callers of the evaluator's operator() were updated to pass in
the callback. The benefit of the callback over evaluateOrDefault() is
that if the default value is expensive to constuct, like a dummy
generic signature, we will only construct it in the case where a
cycle actually happened, otherwise we just delete the callback.

(cherry picked from commit b8fcf1c)
- It's wasteful to cache because each invocation is unique
- Inference sources only need to be Types and not TypeLocs
- We can pass in an explicit SourceLoc for diagnostics

(cherry picked from commit 4e39dac)
@kavon kavon requested a review from CodaFi as a code owner February 10, 2024 00:34
@kavon
Copy link
Member Author

kavon commented Feb 10, 2024

@swift-ci smoke test

@kavon kavon merged commit 74a3839 into swiftlang:main Feb 10, 2024
@kavon kavon deleted the ncgenerics-test-fixes-kavon-v7 branch February 10, 2024 05:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants