Avoid overflow in is_impossible_method

This commit is contained in:
Michael Goulet 2022-08-18 01:12:46 +00:00
parent 9c20b2a8cc
commit c4a5b14211
2 changed files with 29 additions and 3 deletions

View file

@ -571,9 +571,16 @@ fn is_impossible_method<'tcx>(
});
tcx.infer_ctxt().ignoring_regions().enter(|ref infcx| {
let mut fulfill_ctxt = <dyn TraitEngine<'_>>::new(tcx);
fulfill_ctxt.register_predicate_obligations(infcx, predicates_for_trait);
!fulfill_ctxt.select_all_or_error(infcx).is_empty()
for obligation in predicates_for_trait {
// Ignore overflow error, to be conservative.
if let Ok(result) = infcx.evaluate_obligation(&obligation)
&& !result.may_apply()
{
return true;
}
}
false
})
}