Skip to content

Commit 6354e85

Browse files
committed
Don't run resolve_vars_if_possible in normalize_erasing_regions
NOTE: `needs_infer()` needs to come after ignoring generic parameters
1 parent c919f49 commit 6354e85

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

compiler/rustc_traits/src/normalize_erasing_regions.rs

+9-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use rustc_infer::infer::TyCtxtInferExt;
22
use rustc_middle::traits::query::NoSolution;
33
use rustc_middle::ty::query::Providers;
44
use rustc_middle::ty::subst::GenericArg;
5-
use rustc_middle::ty::{self, ParamEnvAnd, TyCtxt};
5+
use rustc_middle::ty::{self, ParamEnvAnd, TyCtxt, TypeFoldable};
66
use rustc_trait_selection::traits::query::normalize::AtExt;
77
use rustc_trait_selection::traits::{Normalized, ObligationCause};
88
use std::sync::atomic::Ordering;
@@ -31,8 +31,14 @@ fn normalize_generic_arg_after_erasing_regions<'tcx>(
3131
None,
3232
);
3333

34-
let normalized_value = infcx.resolve_vars_if_possible(normalized_value);
35-
infcx.tcx.erase_regions(normalized_value)
34+
let resolved_value = infcx.resolve_vars_if_possible(normalized_value);
35+
// It's unclear when `resolve_vars` would have an effect in a
36+
// fresh `InferCtxt`. If this assert does trigger, it will give
37+
// us a test case.
38+
debug_assert_eq!(normalized_value, resolved_value);
39+
let erased = infcx.tcx.erase_regions(resolved_value);
40+
debug_assert!(!erased.needs_infer(), "{:?}", erased);
41+
erased
3642
}
3743
Err(NoSolution) => bug!("could not fully normalize `{:?}`", value),
3844
}

0 commit comments

Comments
 (0)