-
Notifications
You must be signed in to change notification settings - Fork 13k
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
Don't elaborate non-obligations into obligations #109641
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.