-
Notifications
You must be signed in to change notification settings - Fork 13.4k
Don't elaborate non-obligations into obligations #109641
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Conversation
r? @cjgillot (rustbot has picked a reviewer for you, use r? to override) |
Some changes occurred in src/tools/clippy cc @rust-lang/clippy Some changes occurred to the core trait solver cc @rust-lang/initiative-trait-system-refactor Some changes occurred to MIR optimizations cc @rust-lang/wg-mir-opt |
🌲 The tree is currently closed for pull requests below priority 100. This pull request will be tested once the tree is reopened. |
…-obl, r=oli-obk Don't elaborate non-obligations into obligations It's suspicious to elaborate a `PolyTraitRef` or `Predicate` into an `Obligation`, since the former does not have a param-env associated with it, but the latter does. This is a footgun that, while not being misused *currently* in the compiler, easily could be misused by someone less familiar with the elaborator's inner workings. This PR just changes the API -- ideally, the elaborator wouldn't even have to deal with obligations if we're not elaborating obligations, but that would require a bit more abstraction than I could be bothered with today.
@@ -1912,14 +1912,13 @@ impl<'tcx> WfCheckingCtxt<'_, 'tcx> { | |||
// Check elaborated bounds. | |||
let implied_obligations = traits::elaborate_predicates_with_span(tcx, predicates_with_span); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
implied_predicates
…iaskrgr Rollup of 8 pull requests Successful merges: - rust-lang#97506 (Stabilize `nonnull_slice_from_raw_parts`) - rust-lang#98651 (Follow C-RW-VALUE in std::io::Cursor example) - rust-lang#102742 (Remove unnecessary raw pointer in __rust_start_panic arg) - rust-lang#109587 (Use an IndexVec to debug fingerprints.) - rust-lang#109613 (fix type suggestions in match arms) - rust-lang#109633 (Fix "Directly go to item in search if there is only one result" setting) - rust-lang#109635 (debuginfo: Get pointer size/align from tcx.data_layout instead of layout_of) - rust-lang#109641 (Don't elaborate non-obligations into obligations) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
It's suspicious to elaborate a
PolyTraitRef
orPredicate
into anObligation
, since the former does not have a param-env associated with it, but the latter does. This is a footgun that, while not being misused currently in the compiler, easily could be misused by someone less familiar with the elaborator's inner workings.This PR just changes the API -- ideally, the elaborator wouldn't even have to deal with obligations if we're not elaborating obligations, but that would require a bit more abstraction than I could be bothered with today.