Skip to content

Commit 002efeb

Browse files
committed
additional TypingEnv cleanups
1 parent d61effe commit 002efeb

File tree

7 files changed

+20
-29
lines changed

7 files changed

+20
-29
lines changed

Diff for: compiler/rustc_codegen_ssa/src/base.rs

+4-3
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ use rustc_middle::mir::BinOp;
2222
use rustc_middle::mir::mono::{CodegenUnit, CodegenUnitNameBuilder, MonoItem};
2323
use rustc_middle::query::Providers;
2424
use rustc_middle::ty::layout::{HasTyCtxt, HasTypingEnv, LayoutOf, TyAndLayout};
25-
use rustc_middle::ty::{self, Instance, Ty, TyCtxt, TypingMode};
25+
use rustc_middle::ty::{self, Instance, Ty, TyCtxt};
2626
use rustc_session::Session;
2727
use rustc_session::config::{self, CrateType, EntryFnType, OptLevel, OutputType};
2828
use rustc_span::symbol::sym;
@@ -119,7 +119,8 @@ pub fn validate_trivial_unsize<'tcx>(
119119
) -> bool {
120120
match (source_data.principal(), target_data.principal()) {
121121
(Some(hr_source_principal), Some(hr_target_principal)) => {
122-
let infcx = tcx.infer_ctxt().build(TypingMode::PostAnalysis);
122+
let (infcx, param_env) =
123+
tcx.infer_ctxt().build_with_typing_env(ty::TypingEnv::fully_monomorphized());
123124
let universe = infcx.universe();
124125
let ocx = ObligationCtxt::new(&infcx);
125126
infcx.enter_forall(hr_target_principal, |target_principal| {
@@ -130,7 +131,7 @@ pub fn validate_trivial_unsize<'tcx>(
130131
);
131132
let Ok(()) = ocx.eq_trace(
132133
&ObligationCause::dummy(),
133-
ty::ParamEnv::reveal_all(),
134+
param_env,
134135
ToTrace::to_trace(
135136
&ObligationCause::dummy(),
136137
hr_target_principal,

Diff for: compiler/rustc_hir_analysis/src/check/compare_impl_item.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1193,9 +1193,9 @@ fn compare_self_type<'tcx>(
11931193
ty::AssocItemContainer::Trait => tcx.types.self_param,
11941194
};
11951195
let self_arg_ty = tcx.fn_sig(method.def_id).instantiate_identity().input(0);
1196-
let param_env = ty::ParamEnv::reveal_all();
1197-
1198-
let infcx = tcx.infer_ctxt().build(TypingMode::non_body_analysis());
1196+
let (infcx, param_env) = tcx
1197+
.infer_ctxt()
1198+
.build_with_typing_env(ty::TypingEnv::non_body_analysis(tcx, method.def_id));
11991199
let self_arg_ty = tcx.liberate_late_bound_regions(method.def_id, self_arg_ty);
12001200
let can_eq_self = |ty| infcx.can_eq(param_env, untransformed_self_ty, ty);
12011201
match ExplicitSelf::determine(self_arg_ty, can_eq_self) {

Diff for: compiler/rustc_middle/src/mir/mod.rs

+1-4
Original file line numberDiff line numberDiff line change
@@ -459,10 +459,7 @@ impl<'tcx> Body<'tcx> {
459459
typing_mode: ty::TypingMode::non_body_analysis(),
460460
param_env: tcx.param_env(self.source.def_id()),
461461
},
462-
MirPhase::Runtime(_) => TypingEnv {
463-
typing_mode: ty::TypingMode::PostAnalysis,
464-
param_env: tcx.param_env_reveal_all_normalized(self.source.def_id()),
465-
},
462+
MirPhase::Runtime(_) => TypingEnv::post_analysis(tcx, self.source.def_id()),
466463
}
467464
}
468465

Diff for: compiler/rustc_mir_transform/src/instsimplify.rs

+4-10
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use rustc_hir::LangItem;
66
use rustc_middle::bug;
77
use rustc_middle::mir::*;
88
use rustc_middle::ty::layout::ValidityRequirement;
9-
use rustc_middle::ty::{self, GenericArgsRef, ParamEnv, Ty, TyCtxt, layout};
9+
use rustc_middle::ty::{self, GenericArgsRef, Ty, TyCtxt, layout};
1010
use rustc_span::sym;
1111
use rustc_span::symbol::Symbol;
1212

@@ -34,7 +34,7 @@ impl<'tcx> crate::MirPass<'tcx> for InstSimplify {
3434
let ctx = InstSimplifyContext {
3535
tcx,
3636
local_decls: &body.local_decls,
37-
param_env: tcx.param_env_reveal_all_normalized(body.source.def_id()),
37+
typing_env: body.typing_env(tcx),
3838
};
3939
let preserve_ub_checks =
4040
attr::contains_name(tcx.hir().krate_attrs(), sym::rustc_preserve_ub_checks);
@@ -66,13 +66,7 @@ impl<'tcx> crate::MirPass<'tcx> for InstSimplify {
6666
struct InstSimplifyContext<'a, 'tcx> {
6767
tcx: TyCtxt<'tcx>,
6868
local_decls: &'a LocalDecls<'tcx>,
69-
param_env: ParamEnv<'tcx>,
70-
}
71-
72-
impl<'tcx> InstSimplifyContext<'_, 'tcx> {
73-
fn typing_env(&self) -> ty::TypingEnv<'tcx> {
74-
ty::TypingEnv { typing_mode: ty::TypingMode::PostAnalysis, param_env: self.param_env }
75-
}
69+
typing_env: ty::TypingEnv<'tcx>,
7670
}
7771

7872
impl<'tcx> InstSimplifyContext<'_, 'tcx> {
@@ -354,7 +348,7 @@ impl<'tcx> InstSimplifyContext<'_, 'tcx> {
354348
}
355349

356350
let known_is_valid =
357-
intrinsic_assert_panics(self.tcx, self.typing_env(), args[0], intrinsic_name);
351+
intrinsic_assert_panics(self.tcx, self.typing_env, args[0], intrinsic_name);
358352
match known_is_valid {
359353
// We don't know the layout or it's not validity assertion at all, don't touch it
360354
None => {}

Diff for: compiler/rustc_symbol_mangling/src/v0.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -233,11 +233,11 @@ impl<'tcx> Printer<'tcx> for SymbolMangler<'tcx> {
233233
let key = self.tcx.def_key(impl_def_id);
234234
let parent_def_id = DefId { index: key.parent.unwrap(), ..impl_def_id };
235235

236-
let mut param_env = self.tcx.param_env_reveal_all_normalized(impl_def_id);
236+
let mut typing_env = ty::TypingEnv::post_analysis(self.tcx, impl_def_id);
237237
if !args.is_empty() {
238-
param_env = EarlyBinder::bind(param_env).instantiate(self.tcx, args);
238+
typing_env.param_env =
239+
EarlyBinder::bind(typing_env.param_env).instantiate(self.tcx, args);
239240
}
240-
let typing_env = ty::TypingEnv { typing_mode: ty::TypingMode::PostAnalysis, param_env };
241241

242242
match &mut impl_trait_ref {
243243
Some(impl_trait_ref) => {

Diff for: compiler/rustc_trait_selection/src/traits/mod.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -698,8 +698,8 @@ fn replace_param_and_infer_args_with_placeholder<'tcx>(
698698
/// used during analysis.
699699
pub fn impossible_predicates<'tcx>(tcx: TyCtxt<'tcx>, predicates: Vec<ty::Clause<'tcx>>) -> bool {
700700
debug!("impossible_predicates(predicates={:?})", predicates);
701-
let infcx = tcx.infer_ctxt().build(TypingMode::PostAnalysis);
702-
let param_env = ty::ParamEnv::reveal_all();
701+
let (infcx, param_env) =
702+
tcx.infer_ctxt().build_with_typing_env(ty::TypingEnv::fully_monomorphized());
703703
let ocx = ObligationCtxt::new(&infcx);
704704
let predicates = ocx.normalize(&ObligationCause::dummy(), param_env, predicates);
705705
for predicate in predicates {

Diff for: compiler/rustc_trait_selection/src/traits/vtable.rs

+3-4
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ use rustc_infer::traits::util::PredicateSet;
99
use rustc_middle::bug;
1010
use rustc_middle::query::Providers;
1111
use rustc_middle::ty::{
12-
self, GenericArgs, GenericParamDefKind, Ty, TyCtxt, TypeVisitableExt, TypingMode, Upcast,
13-
VtblEntry,
12+
self, GenericArgs, GenericParamDefKind, Ty, TyCtxt, TypeVisitableExt, Upcast, VtblEntry,
1413
};
1514
use rustc_span::{DUMMY_SP, Span, sym};
1615
use smallvec::{SmallVec, smallvec};
@@ -442,8 +441,8 @@ fn trait_refs_are_compatible<'tcx>(
442441
return false;
443442
}
444443

445-
let infcx = tcx.infer_ctxt().build(TypingMode::PostAnalysis);
446-
let param_env = ty::ParamEnv::reveal_all();
444+
let (infcx, param_env) =
445+
tcx.infer_ctxt().build_with_typing_env(ty::TypingEnv::fully_monomorphized());
447446
let ocx = ObligationCtxt::new(&infcx);
448447
let hr_source_principal =
449448
ocx.normalize(&ObligationCause::dummy(), param_env, hr_vtable_principal);

0 commit comments

Comments
 (0)