-
Notifications
You must be signed in to change notification settings - Fork 12.8k
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
Choose predicates without inference variables over those with them #55453
Conversation
Fixes rust-lang#54705 When constructing synthetic auto trait impls, we may come across multiple predicates involving the same type, trait, and substitutions. Since we can only display one of these, we pick the one with the 'most strict' lifetime paramters. This ensures that the impl we render the user is actually valid (that is, a struct matching that impl will actually implement the auto trait in question). This commit exapnds the definition of 'more strict' to take into account inference variables. We always choose a predicate without inference variables over a predicate with inference variables.
(rust_highfive has picked a reviewer for you, use r? to override) |
Thanks for the PR, @Aaron1011! |
@Aaron1011 you said here #54705 (comment) that you had a minimal reproduction, and it does not appear to utilize The test you have included on this PR does require using (Meanwhile the minimal "reproduction" does not cause an error in play, so maybe I've misunderstood how it works or what its reproducing...)
Anyway: Can you provide a unit test that does not require |
Anyway this seems fine, apart from the question about the current test. r=me once that question is answered. |
@pnkfelix: I've only incliuded a |
@bors r+ |
📌 Commit 20aa751 has been approved by |
💡 This pull request was already approved, no need to approve it again.
|
📌 Commit 20aa751 has been approved by |
Accidentally did rollup originally and editing my comment didn’t undo it. Going to r- and then r+ |
@bors r- |
@bors r+ |
📌 Commit 20aa751 has been approved by |
Hmmm |
@bors rollup- |
…nkfelix Choose predicates without inference variables over those with them Fixes rust-lang#54705 When constructing synthetic auto trait impls, we may come across multiple predicates involving the same type, trait, and substitutions. Since we can only display one of these, we pick the one with the 'most strict' lifetime paramters. This ensures that the impl we render the user is actually valid (that is, a struct matching that impl will actually implement the auto trait in question). This commit exapnds the definition of 'more strict' to take into account inference variables. We always choose a predicate without inference variables over a predicate with inference variables.
Rollup of 14 pull requests Successful merges: - #55377 (Slight copy-editing for `std::cell::Cell` docs) - #55441 (Remove unused re import in gdb_rust_pretty_printing) - #55453 (Choose predicates without inference variables over those with them) - #55495 (Don't print opt fuel messages to stdout because it breaks Rustbuild) - #55501 (Make `process_obligations`' computation of `completed` optional.) - #55510 (Fix feature gate only being checked on first repr attr.) - #55609 (Run name-anon-globals after LTO passes as well) - #55645 (do not print wrapping ranges like normal ranges in validity diagnostics) - #55688 (Standardised names and location of ui issue tests) - #55692 (-C remark: fix incorrect warning about requiring "--debuginfo" instead of "-C debuginfo=n") - #55702 (Add `aarch64-pc-windows-msvc` to deployed targets) - #55728 (Update lldb) - #55730 (Use trait impl method span when type param mismatch is due to impl Trait) - #55734 (refactor: use shorthand fields)
Rollup of 14 pull requests Successful merges: - rust-lang#55377 (Slight copy-editing for `std::cell::Cell` docs) - rust-lang#55441 (Remove unused re import in gdb_rust_pretty_printing) - rust-lang#55453 (Choose predicates without inference variables over those with them) - rust-lang#55495 (Don't print opt fuel messages to stdout because it breaks Rustbuild) - rust-lang#55501 (Make `process_obligations`' computation of `completed` optional.) - rust-lang#55510 (Fix feature gate only being checked on first repr attr.) - rust-lang#55609 (Run name-anon-globals after LTO passes as well) - rust-lang#55645 (do not print wrapping ranges like normal ranges in validity diagnostics) - rust-lang#55688 (Standardised names and location of ui issue tests) - rust-lang#55692 (-C remark: fix incorrect warning about requiring "--debuginfo" instead of "-C debuginfo=n") - rust-lang#55702 (Add `aarch64-pc-windows-msvc` to deployed targets) - rust-lang#55728 (Update lldb) - rust-lang#55730 (Use trait impl method span when type param mismatch is due to impl Trait) - rust-lang#55734 (refactor: use shorthand fields)
Fixes #54705
When constructing synthetic auto trait impls, we may come across
multiple predicates involving the same type, trait, and substitutions.
Since we can only display one of these, we pick the one with the 'most
strict' lifetime paramters. This ensures that the impl we render the
user is actually valid (that is, a struct matching that impl will
actually implement the auto trait in question).
This commit exapnds the definition of 'more strict' to take into account
inference variables. We always choose a predicate without inference
variables over a predicate with inference variables.