Skip to content

Commit 5359dc4

Browse files
committed
thir building: use typing_env directly
1 parent 120cd25 commit 5359dc4

File tree

3 files changed

+15
-34
lines changed

3 files changed

+15
-34
lines changed

compiler/rustc_mir_build/src/thir/cx/expr.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ impl<'tcx> Cx<'tcx> {
285285
let discr_ty = ty.to_ty(tcx);
286286

287287
let size = tcx
288-
.layout_of(self.typing_env().as_query_input(discr_ty))
288+
.layout_of(self.typing_env.as_query_input(discr_ty))
289289
.unwrap_or_else(|e| panic!("could not compute layout for {discr_ty:?}: {e:?}"))
290290
.size;
291291

@@ -1024,7 +1024,7 @@ impl<'tcx> Cx<'tcx> {
10241024
// but distinguish between &STATIC and &THREAD_LOCAL as they have different semantics
10251025
Res::Def(DefKind::Static { .. }, id) => {
10261026
// this is &raw for extern static or static mut, and & for other statics
1027-
let ty = self.tcx.static_ptr_ty(id, self.typing_env());
1027+
let ty = self.tcx.static_ptr_ty(id, self.typing_env);
10281028
let temp_lifetime = self
10291029
.rvalue_scopes
10301030
.temporary_scope(self.region_scope_tree, expr.hir_id.local_id);

compiler/rustc_mir_build/src/thir/cx/mod.rs

+5-15
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ use rustc_hir::lang_items::LangItem;
1212
use rustc_middle::bug;
1313
use rustc_middle::middle::region;
1414
use rustc_middle::thir::*;
15-
use rustc_middle::ty::solve::Reveal;
1615
use rustc_middle::ty::{self, RvalueScopes, TyCtxt};
1716
use tracing::instrument;
1817

@@ -57,7 +56,7 @@ struct Cx<'tcx> {
5756
tcx: TyCtxt<'tcx>,
5857
thir: Thir<'tcx>,
5958

60-
param_env: ty::ParamEnv<'tcx>,
59+
typing_env: ty::TypingEnv<'tcx>,
6160

6261
region_scope_tree: &'tcx region::ScopeTree,
6362
typeck_results: &'tcx ty::TypeckResults<'tcx>,
@@ -98,7 +97,9 @@ impl<'tcx> Cx<'tcx> {
9897
Cx {
9998
tcx,
10099
thir: Thir::new(body_type),
101-
param_env: tcx.param_env(def),
100+
// FIXME(#132279): We're in a body, we should use a typing
101+
// mode which reveals the opaque types defined by that body.
102+
typing_env: ty::TypingEnv::non_body_analysis(tcx, def),
102103
region_scope_tree: tcx.region_scope_tree(def),
103104
typeck_results,
104105
rvalue_scopes: &typeck_results.rvalue_scopes,
@@ -110,20 +111,9 @@ impl<'tcx> Cx<'tcx> {
110111
}
111112
}
112113

113-
fn typing_mode(&self) -> ty::TypingMode<'tcx> {
114-
debug_assert_eq!(self.param_env.reveal(), Reveal::UserFacing);
115-
// FIXME(#132279): In case we're in a body, we should use a typing
116-
// mode which reveals the opaque types defined by that body.
117-
ty::TypingMode::non_body_analysis()
118-
}
119-
120-
fn typing_env(&self) -> ty::TypingEnv<'tcx> {
121-
ty::TypingEnv { typing_mode: self.typing_mode(), param_env: self.param_env }
122-
}
123-
124114
#[instrument(level = "debug", skip(self))]
125115
fn pattern_from_hir(&mut self, p: &'tcx hir::Pat<'tcx>) -> Box<Pat<'tcx>> {
126-
pat_from_hir(self.tcx, self.typing_env(), self.typeck_results(), p)
116+
pat_from_hir(self.tcx, self.typing_env, self.typeck_results(), p)
127117
}
128118

129119
fn closure_env_param(&self, owner_def: LocalDefId, expr_id: HirId) -> Option<Param<'tcx>> {

compiler/rustc_mir_build/src/thir/pattern/check_match.rs

+8-17
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ use rustc_errors::{Applicability, ErrorGuaranteed, MultiSpan, struct_span_code_e
77
use rustc_hir::def::*;
88
use rustc_hir::def_id::LocalDefId;
99
use rustc_hir::{self as hir, BindingMode, ByRef, HirId};
10-
use rustc_infer::traits::Reveal;
1110
use rustc_middle::bug;
1211
use rustc_middle::middle::limits::get_limit_size;
1312
use rustc_middle::thir::visit::Visitor;
@@ -39,7 +38,8 @@ pub(crate) fn check_match(tcx: TyCtxt<'_>, def_id: LocalDefId) -> Result<(), Err
3938
tcx,
4039
thir: &*thir,
4140
typeck_results,
42-
param_env: tcx.param_env(def_id),
41+
// FIXME(#132279): We're in a body, should handle opaques.
42+
typing_env: ty::TypingEnv::non_body_analysis(tcx, def_id),
4343
lint_level: tcx.local_def_id_to_hir_id(def_id),
4444
let_source: LetSource::None,
4545
pattern_arena: &pattern_arena,
@@ -86,7 +86,7 @@ enum LetSource {
8686

8787
struct MatchVisitor<'p, 'tcx> {
8888
tcx: TyCtxt<'tcx>,
89-
param_env: ty::ParamEnv<'tcx>,
89+
typing_env: ty::TypingEnv<'tcx>,
9090
typeck_results: &'tcx ty::TypeckResults<'tcx>,
9191
thir: &'p Thir<'tcx>,
9292
lint_level: HirId,
@@ -192,15 +192,6 @@ impl<'p, 'tcx> Visitor<'p, 'tcx> for MatchVisitor<'p, 'tcx> {
192192
}
193193

194194
impl<'p, 'tcx> MatchVisitor<'p, 'tcx> {
195-
fn typing_env(&self) -> ty::TypingEnv<'tcx> {
196-
// FIXME(#132279): We're in a body, should handle opaques.
197-
debug_assert_eq!(self.param_env.reveal(), Reveal::UserFacing);
198-
ty::TypingEnv {
199-
typing_mode: ty::TypingMode::non_body_analysis(),
200-
param_env: self.param_env,
201-
}
202-
}
203-
204195
#[instrument(level = "trace", skip(self, f))]
205196
fn with_let_source(&mut self, let_source: LetSource, f: impl FnOnce(&mut Self)) {
206197
let old_let_source = self.let_source;
@@ -391,7 +382,7 @@ impl<'p, 'tcx> MatchVisitor<'p, 'tcx> {
391382
PatCtxt {
392383
tcx: self.tcx,
393384
typeck_results: self.typeck_results,
394-
param_env: self.param_env,
385+
typing_env: self.typing_env,
395386
module: self.tcx.parent_module(self.lint_level).to_def_id(),
396387
dropless_arena: self.dropless_arena,
397388
match_lint_level: self.lint_level,
@@ -731,8 +722,8 @@ impl<'p, 'tcx> MatchVisitor<'p, 'tcx> {
731722
.variant(*variant_index)
732723
.inhabited_predicate(self.tcx, *adt)
733724
.instantiate(self.tcx, args);
734-
variant_inhabited.apply(self.tcx, cx.typing_env(), cx.module)
735-
&& !variant_inhabited.apply_ignore_module(self.tcx, cx.typing_env())
725+
variant_inhabited.apply(self.tcx, cx.typing_env, cx.module)
726+
&& !variant_inhabited.apply_ignore_module(self.tcx, cx.typing_env)
736727
} else {
737728
false
738729
};
@@ -770,7 +761,7 @@ fn check_borrow_conflicts_in_at_patterns<'tcx>(cx: &MatchVisitor<'_, 'tcx>, pat:
770761
return;
771762
};
772763

773-
let is_binding_by_move = |ty: Ty<'tcx>| !ty.is_copy_modulo_regions(cx.tcx, cx.typing_env());
764+
let is_binding_by_move = |ty: Ty<'tcx>| !ty.is_copy_modulo_regions(cx.tcx, cx.typing_env);
774765

775766
let sess = cx.tcx.sess;
776767

@@ -1134,7 +1125,7 @@ fn report_non_exhaustive_match<'p, 'tcx>(
11341125
}
11351126

11361127
if let ty::Ref(_, sub_ty, _) = scrut_ty.kind() {
1137-
if !sub_ty.is_inhabited_from(cx.tcx, cx.module, cx.typing_env()) {
1128+
if !sub_ty.is_inhabited_from(cx.tcx, cx.module, cx.typing_env) {
11381129
err.note("references are always considered inhabited");
11391130
}
11401131
}

0 commit comments

Comments
 (0)