Substitute types before checking compatibility.
This commit is contained in:
parent
b657dc555b
commit
45ffe41d14
1 changed files with 14 additions and 1 deletions
|
@ -440,6 +440,10 @@ impl<'tcx> Inliner<'tcx> {
|
||||||
validation: Ok(()),
|
validation: Ok(()),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
for var_debug_info in callee_body.var_debug_info.iter() {
|
||||||
|
checker.visit_var_debug_info(var_debug_info);
|
||||||
|
}
|
||||||
|
|
||||||
// Traverse the MIR manually so we can account for the effects of inlining on the CFG.
|
// Traverse the MIR manually so we can account for the effects of inlining on the CFG.
|
||||||
let mut work_list = vec![START_BLOCK];
|
let mut work_list = vec![START_BLOCK];
|
||||||
let mut visited = BitSet::new_empty(callee_body.basic_blocks.len());
|
let mut visited = BitSet::new_empty(callee_body.basic_blocks.len());
|
||||||
|
@ -847,7 +851,16 @@ impl<'tcx> Visitor<'tcx> for CostChecker<'_, 'tcx> {
|
||||||
if let ProjectionElem::Field(f, ty) = elem {
|
if let ProjectionElem::Field(f, ty) = elem {
|
||||||
let parent_ty = place_ref.ty(&self.callee_body.local_decls, self.tcx);
|
let parent_ty = place_ref.ty(&self.callee_body.local_decls, self.tcx);
|
||||||
let check_equal = |this: &mut Self, f_ty| {
|
let check_equal = |this: &mut Self, f_ty| {
|
||||||
if !util::is_equal_up_to_subtyping(this.tcx, this.param_env, ty, f_ty) {
|
// Fast path if there is nothing to substitute.
|
||||||
|
if ty == f_ty {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let ty = this.instance.subst_mir(this.tcx, ty::EarlyBinder::bind(&ty));
|
||||||
|
let f_ty = this.instance.subst_mir(this.tcx, ty::EarlyBinder::bind(&f_ty));
|
||||||
|
if ty == f_ty {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if !util::is_subtype(this.tcx, this.param_env, ty, f_ty) {
|
||||||
trace!(?ty, ?f_ty);
|
trace!(?ty, ?f_ty);
|
||||||
this.validation = Err("failed to normalize projection type");
|
this.validation = Err("failed to normalize projection type");
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue