self.tcx.for_each_relevant_impl(
trait_ref.def_id, trait_self_ty, |def_id| {
- let impl_substs = self.fresh_substs_for_item(obligation.cause.span, def_id);
+ let impl_substs = self.fresh_substs_for_item(param_env.universe,
+ obligation.cause.span,
+ def_id);
let impl_trait_ref = tcx
.impl_trait_ref(def_id)
.unwrap()
item_name: ast::Name,
_impl_item_def_id: DefId,
trait_item_def_id: DefId,
- requirement: &fmt::Display)
+ requirement: &dyn fmt::Display)
-> DiagnosticBuilder<'tcx>
{
let msg = "impl has stricter requirements than trait";
span_bug!(span, "subtype requirement gave wrong error: `{:?}`", predicate)
}
- ty::Predicate::Equate(ref predicate) => {
- let predicate = self.resolve_type_vars_if_possible(predicate);
- let err = self.equality_predicate(&obligation.cause,
- obligation.param_env,
- &predicate).err().unwrap();
- struct_span_err!(self.tcx.sess, span, E0278,
- "the requirement `{}` is not satisfied (`{}`)",
- predicate, err)
- }
-
ty::Predicate::RegionOutlives(ref predicate) => {
let predicate = self.resolve_type_vars_if_possible(predicate);
let err = self.region_outlives_predicate(&obligation.cause,
-> bool {
struct ParamToVarFolder<'a, 'gcx: 'a+'tcx, 'tcx: 'a> {
infcx: &'a InferCtxt<'a, 'gcx, 'tcx>,
+ param_env: ty::ParamEnv<'tcx>,
var_map: FxHashMap<Ty<'tcx>, Ty<'tcx>>
}
fn fold_ty(&mut self, ty: Ty<'tcx>) -> Ty<'tcx> {
if let ty::TyParam(ty::ParamTy {name, ..}) = ty.sty {
let infcx = self.infcx;
- self.var_map.entry(ty).or_insert_with(||
- infcx.next_ty_var(
- TypeVariableOrigin::TypeParameterDefinition(DUMMY_SP, name)))
+ let param_env = self.param_env;
+ self.var_map
+ .entry(ty)
+ .or_insert_with(|| {
+ let origin = TypeVariableOrigin::TypeParameterDefinition(DUMMY_SP,
+ name);
+ infcx.next_ty_var(param_env.universe, origin)
+ })
} else {
ty.super_fold_with(self)
}
let cleaned_pred = pred.fold_with(&mut ParamToVarFolder {
infcx: self,
+ param_env,
var_map: FxHashMap()
});
ObligationCauseCode::MatchExpressionArm { .. } |
ObligationCauseCode::IfExpression |
ObligationCauseCode::IfExpressionWithNoElse |
- ObligationCauseCode::EquatePredicate |
ObligationCauseCode::MainFunctionType |
ObligationCauseCode::StartFunctionType |
ObligationCauseCode::IntrinsicType |