Rollup merge of #109641 - compiler-errors:dont-elaborate-non-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.
This commit is contained in:
commit
6535e66fa5
20 changed files with 112 additions and 131 deletions
|
@ -117,7 +117,7 @@ impl<'tcx> MirPass<'tcx> for ConstProp {
|
|||
.filter_map(|(p, _)| if p.is_global() { Some(*p) } else { None });
|
||||
if traits::impossible_predicates(
|
||||
tcx,
|
||||
traits::elaborate_predicates(tcx, predicates).map(|o| o.predicate).collect(),
|
||||
traits::elaborate_predicates(tcx, predicates).collect(),
|
||||
) {
|
||||
trace!("ConstProp skipped for {:?}: found unsatisfiable predicates", def_id);
|
||||
return;
|
||||
|
|
|
@ -93,7 +93,7 @@ impl<'tcx> MirLint<'tcx> for ConstProp {
|
|||
.filter_map(|(p, _)| if p.is_global() { Some(*p) } else { None });
|
||||
if traits::impossible_predicates(
|
||||
tcx,
|
||||
traits::elaborate_predicates(tcx, predicates).map(|o| o.predicate).collect(),
|
||||
traits::elaborate_predicates(tcx, predicates).collect(),
|
||||
) {
|
||||
trace!("ConstProp skipped for {:?}: found unsatisfiable predicates", def_id);
|
||||
return;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue