Skip to content

Commit

Permalink
Don't run resolve_vars_if_possible in normalize_erasing_regions
Browse files Browse the repository at this point in the history
NOTE: `needs_infer()` needs to come after ignoring generic parameters
  • Loading branch information
jyn514 committed Nov 18, 2020
1 parent c919f49 commit 6354e85
Showing 1 changed file with 9 additions and 3 deletions.
12 changes: 9 additions & 3 deletions compiler/rustc_traits/src/normalize_erasing_regions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use rustc_infer::infer::TyCtxtInferExt;
use rustc_middle::traits::query::NoSolution;
use rustc_middle::ty::query::Providers;
use rustc_middle::ty::subst::GenericArg;
use rustc_middle::ty::{self, ParamEnvAnd, TyCtxt};
use rustc_middle::ty::{self, ParamEnvAnd, TyCtxt, TypeFoldable};
use rustc_trait_selection::traits::query::normalize::AtExt;
use rustc_trait_selection::traits::{Normalized, ObligationCause};
use std::sync::atomic::Ordering;
Expand Down Expand Up @@ -31,8 +31,14 @@ fn normalize_generic_arg_after_erasing_regions<'tcx>(
None,
);

let normalized_value = infcx.resolve_vars_if_possible(normalized_value);
infcx.tcx.erase_regions(normalized_value)
let resolved_value = infcx.resolve_vars_if_possible(normalized_value);
// It's unclear when `resolve_vars` would have an effect in a
// fresh `InferCtxt`. If this assert does trigger, it will give
// us a test case.
debug_assert_eq!(normalized_value, resolved_value);
let erased = infcx.tcx.erase_regions(resolved_value);
debug_assert!(!erased.needs_infer(), "{:?}", erased);
erased
}
Err(NoSolution) => bug!("could not fully normalize `{:?}`", value),
}
Expand Down

0 comments on commit 6354e85

Please sign in to comment.