Try to fix problem
This commit is contained in:
parent
779eef2dae
commit
a00f2bcf5c
@ -1084,11 +1084,12 @@ fn check_user_type_annotations(&mut self) {
|
||||
span_mirbug!(
|
||||
self,
|
||||
user_annotation,
|
||||
"bad user type AscribeUserType({:?}, {:?} {:?}): {:?}",
|
||||
"bad user type AscribeUserType({:?}, {:?} {:?}, type_of={:?}): {:?}",
|
||||
inferred_ty,
|
||||
def_id,
|
||||
user_substs,
|
||||
terr
|
||||
self.tcx().type_of(def_id),
|
||||
terr,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -6,7 +6,9 @@
|
||||
use rustc_infer::traits::TraitEngineExt as _;
|
||||
use rustc_middle::ty::query::Providers;
|
||||
use rustc_middle::ty::subst::{GenericArg, Subst, UserSelfTy, UserSubsts};
|
||||
use rustc_middle::ty::{self, FnSig, Lift, PolyFnSig, Ty, TyCtxt, TypeFoldable, Variance};
|
||||
use rustc_middle::ty::{
|
||||
self, FnSig, Lift, PolyFnSig, PredicateKind, Ty, TyCtxt, TypeFoldable, Variance,
|
||||
};
|
||||
use rustc_middle::ty::{ParamEnv, ParamEnvAnd, Predicate, ToPredicate};
|
||||
use rustc_span::DUMMY_SP;
|
||||
use rustc_trait_selection::infer::InferCtxtBuilderExt;
|
||||
@ -85,7 +87,16 @@ fn relate<T>(&mut self, a: T, variance: Variance, b: T) -> Result<(), NoSolution
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn prove_predicate(&mut self, predicate: Predicate<'tcx>) {
|
||||
fn prove_predicate(&mut self, mut predicate: Predicate<'tcx>) {
|
||||
if let PredicateKind::Trait(mut tr) = predicate.kind().skip_binder() {
|
||||
if let hir::Constness::Const = tr.constness {
|
||||
// FIXME check if we actually want to prove const predicates inside AscribeUserType
|
||||
tr.constness = hir::Constness::NotConst;
|
||||
predicate =
|
||||
predicate.kind().rebind(PredicateKind::Trait(tr)).to_predicate(self.tcx());
|
||||
}
|
||||
}
|
||||
|
||||
self.fulfill_cx.register_predicate_obligation(
|
||||
self.infcx,
|
||||
Obligation::new(ObligationCause::dummy(), self.param_env, predicate),
|
||||
@ -126,6 +137,7 @@ fn relate_mir_and_user_ty(
|
||||
// outlives" error messages.
|
||||
let instantiated_predicates =
|
||||
self.tcx().predicates_of(def_id).instantiate(self.tcx(), substs);
|
||||
debug!(?instantiated_predicates.predicates);
|
||||
for instantiated_predicate in instantiated_predicates.predicates {
|
||||
let instantiated_predicate = self.normalize(instantiated_predicate);
|
||||
self.prove_predicate(instantiated_predicate);
|
||||
|
Loading…
Reference in New Issue
Block a user