Skip to content

Commit c1ed7cc

Browse files
committed
Rename uneval_consts to required_consts
1 parent da9aa2d commit c1ed7cc

File tree

7 files changed

+44
-41
lines changed

7 files changed

+44
-41
lines changed

src/librustc_codegen_ssa/mir/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ pub fn codegen_mir<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>>(
191191

192192
fx.per_local_var_debug_info = fx.compute_per_local_var_debug_info();
193193

194-
for const_ in &mir.uneval_consts {
194+
for const_ in &mir.required_consts {
195195
if let Err(err) = fx.eval_mir_constant(const_) {
196196
match err {
197197
// errored or at least linted

src/librustc_middle/mir/mod.rs

+5-4
Original file line numberDiff line numberDiff line change
@@ -156,8 +156,9 @@ pub struct Body<'tcx> {
156156
/// A span representing this MIR, for error reporting.
157157
pub span: Span,
158158

159-
/// Unevaluated consts to evaluate them regardless of being optimized out
160-
pub uneval_consts: Vec<Constant<'tcx>>,
159+
/// Constants that are required to evaluate successfully for this MIR to be well-formed.
160+
/// We hold in this field all the constants we are not able to evaluate yet.
161+
pub required_consts: Vec<Constant<'tcx>>,
161162

162163
/// The user may be writing e.g. &[(SOME_CELL, 42)][i].1 and this would get promoted, because
163164
/// we'd statically know that no thing with interior mutability will ever be available to the
@@ -206,7 +207,7 @@ impl<'tcx> Body<'tcx> {
206207
spread_arg: None,
207208
var_debug_info,
208209
span,
209-
uneval_consts: Vec::new(),
210+
required_consts: Vec::new(),
210211
ignore_interior_mut_in_const_validation: false,
211212
control_flow_destroyed,
212213
predecessor_cache: PredecessorCache::new(),
@@ -231,7 +232,7 @@ impl<'tcx> Body<'tcx> {
231232
arg_count: 0,
232233
spread_arg: None,
233234
span: DUMMY_SP,
234-
uneval_consts: Vec::new(),
235+
required_consts: Vec::new(),
235236
control_flow_destroyed: Vec::new(),
236237
generator_kind: None,
237238
var_debug_info: Vec::new(),

src/librustc_middle/mir/visit.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ macro_rules! make_mir_visitor {
289289

290290
self.visit_span(&$($mutability)? body.span);
291291

292-
for const_ in &$($mutability)? body.uneval_consts {
292+
for const_ in &$($mutability)? body.required_consts {
293293
let location = START_BLOCK.start_location();
294294
self.visit_constant(const_, location);
295295
}

src/librustc_mir/transform/inline.rs

+8-6
Original file line numberDiff line numberDiff line change
@@ -124,12 +124,14 @@ impl Inliner<'tcx> {
124124
};
125125

126126
// Copy only unevaluated constants from the callee_body into the caller_body.
127-
// Although we are only pushing `ConstKind::Unevaluated` consts to uneval_consts,
128-
// here we may not only have `ConstKind::Unevaluated` because we are calling
129-
// `subst_and_normalize_erasing_regions`.
130-
caller_body.uneval_consts.extend(callee_body.uneval_consts.iter().copied().filter(
131-
|&constant| matches!(constant.literal.val, ConstKind::Unevaluated(_, _, _)),
132-
));
127+
// Although we are only pushing `ConstKind::Unevaluated` consts to
128+
// `required_consts`, here we may not only have `ConstKind::Unevaluated`
129+
// because we are calling `subst_and_normalize_erasing_regions`.
130+
caller_body.required_consts.extend(
131+
callee_body.required_consts.iter().copied().filter(|&constant| {
132+
matches!(constant.literal.val, ConstKind::Unevaluated(_, _, _))
133+
}),
134+
);
133135

134136
let start = caller_body.basic_blocks().len();
135137
debug!("attempting to inline callsite {:?} - body={:?}", callsite, callee_body);

src/librustc_mir/transform/mod.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ pub mod no_landing_pads;
3030
pub mod promote_consts;
3131
pub mod qualify_min_const_fn;
3232
pub mod remove_noop_landing_pads;
33+
pub mod required_consts;
3334
pub mod rustc_peek;
3435
pub mod simplify;
3536
pub mod simplify_branches;
3637
pub mod simplify_try;
37-
pub mod uneval_const_set;
3838
pub mod uninhabited_enum_branching;
3939
pub mod unreachable_prop;
4040

@@ -240,13 +240,13 @@ fn mir_validated(
240240

241241
let mut body = tcx.mir_const(def_id).steal();
242242

243-
let mut uneval_consts = Vec::new();
244-
let mut uneval_const_visitor =
245-
self::uneval_const_set::UnevalConstSetVisitor::new(&mut uneval_consts);
243+
let mut required_consts = Vec::new();
244+
let mut required_consts_visitor =
245+
self::required_consts::RequiredConstsVisitor::new(&mut required_consts);
246246
for (bb, bb_data) in traversal::reverse_postorder(&body) {
247-
uneval_const_visitor.visit_basic_block_data(bb, bb_data);
247+
required_consts_visitor.visit_basic_block_data(bb, bb_data);
248248
}
249-
body.uneval_consts = uneval_consts;
249+
body.required_consts = required_consts;
250250

251251
let promote_pass = promote_consts::PromoteTemps::default();
252252
run_passes(
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
use rustc_middle::mir::visit::Visitor;
2+
use rustc_middle::mir::{Constant, Location};
3+
use rustc_middle::ty::ConstKind;
4+
5+
pub struct RequiredConstsVisitor<'a, 'tcx> {
6+
required_consts: &'a mut Vec<Constant<'tcx>>,
7+
}
8+
9+
impl<'a, 'tcx> RequiredConstsVisitor<'a, 'tcx> {
10+
pub fn new(required_consts: &'a mut Vec<Constant<'tcx>>) -> Self {
11+
RequiredConstsVisitor { required_consts }
12+
}
13+
}
14+
15+
impl<'a, 'tcx> Visitor<'tcx> for RequiredConstsVisitor<'a, 'tcx> {
16+
fn visit_constant(&mut self, constant: &Constant<'tcx>, _: Location) {
17+
let const_kind = constant.literal.val;
18+
19+
if let ConstKind::Unevaluated(_, _, _) = const_kind {
20+
self.required_consts.push(*constant);
21+
}
22+
}
23+
}

src/librustc_mir/transform/uneval_const_set.rs

-23
This file was deleted.

0 commit comments

Comments
 (0)