Uh oh!
There was an error while loading. Please reload this page.
Choose predicates without inference variables over those with them - #55453
Conversation
Fixesrust-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
commented
Oct 28, 2018
(rust_highfive has picked a reviewer for you, use r? to override) |
michaelwoerister
commented
Nov 1, 2018
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 |
pnkfelix
commented
Nov 6, 2018
Anyway this seems fine, apart from the question about the current test. r=me once that question is answered. |
Aaron1011
commented
Nov 6, 2018
@pnkfelix: I've only incliuded a |
@bors r+ |
bors
commented
Nov 7, 2018
📌 Commit 20aa751 has been approved by |
bors
commented
Nov 7, 2018
💡 This pull request was already approved, no need to approve it again.
|
bors
commented
Nov 7, 2018
📌 Commit 20aa751 has been approved by |
pnkfelix
commented
Nov 7, 2018
Accidentally did rollup originally and editing my comment didn’t undo it. Going to r- and then r+ |
pnkfelix
commented
Nov 7, 2018
@bors r- |
pnkfelix
commented
Nov 7, 2018
@bors r+ |
bors
commented
Nov 7, 2018
📌 Commit 20aa751 has been approved by |
pnkfelix
commented
Nov 7, 2018
Hmmm |
pnkfelix
commented
Nov 7, 2018
@bors rollup- |
…nkfelix Choose predicates without inference variables over those with them Fixesrust-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)
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.