make ConstEvaluatable more strict

This commit is contained in:
Bastian Kauschke
2020-08-06 10:00:08 +02:00
parent 7bc0bf7254
commit c81935e6df
11 changed files with 133 additions and 26 deletions

View File

@@ -6,6 +6,7 @@ use self::EvaluationResult::*;
use self::SelectionCandidate::*;
use super::coherence::{self, Conflict};
use super::const_evaluatable;
use super::project;
use super::project::normalize_with_depth_to;
use super::util;
@@ -542,17 +543,18 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
}
ty::PredicateAtom::ConstEvaluatable(def_id, substs) => {
match self.tcx().const_eval_resolve(
obligation.param_env,
const_evaluatable::is_const_evaluatable(
self.infcx,
def_id,
substs,
None,
None,
) {
Ok(_) => Ok(EvaluatedToOk),
Err(ErrorHandled::TooGeneric) => Ok(EvaluatedToAmbig),
Err(_) => Ok(EvaluatedToErr),
}
obligation.param_env,
obligation.cause.span,
)
.map(|()| EvaluatedToOk)
.or_else(|e| match e {
ErrorHandled::TooGeneric => Ok(EvaluatedToAmbig),
_ => Ok(EvaluatedToErr),
})
}
ty::PredicateAtom::ConstEquate(c1, c2) => {