Skip to content

Commit be6ccf1

Browse files
committed
Store static initializers in metadata instead of the MIR of statics.
1 parent 95004e5 commit be6ccf1

File tree

6 files changed

+23
-7
lines changed

6 files changed

+23
-7
lines changed

compiler/rustc_const_eval/src/lib.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ pub fn provide(providers: &mut Providers) {
4141
providers.eval_to_const_value_raw = const_eval::eval_to_const_value_raw_provider;
4242
providers.eval_to_allocation_raw = const_eval::eval_to_allocation_raw_provider;
4343
providers.eval_static_initializer_raw = |tcx, def_id| {
44-
assert!(tcx.is_static(def_id));
45-
let instance = ty::Instance::mono(tcx, def_id);
44+
assert!(tcx.is_static(def_id.to_def_id()));
45+
let instance = ty::Instance::mono(tcx, def_id.to_def_id());
4646
let gid = rustc_middle::mir::interpret::GlobalId { instance, promoted: None };
4747
let param_env = ty::ParamEnv::reveal_all();
4848
Ok(tcx.eval_to_allocation_raw(param_env.and(gid))?.alloc_id)

compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs

+9
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,15 @@ provide! { tcx, def_id, other, cdata,
250250
fn_arg_names => { table }
251251
coroutine_kind => { table_direct }
252252
coroutine_for_closure => { table }
253+
eval_static_initializer_raw => {
254+
Ok(cdata
255+
.root
256+
.tables
257+
.eval_static_initializer_raw
258+
.get(cdata, def_id.index)
259+
.map(|lazy| lazy.decode((cdata, tcx)))
260+
.unwrap_or_else(|| panic!("{def_id:?} does not have eval_static_initializer_raw")))
261+
}
253262
trait_def => { table }
254263
deduced_param_attrs => { table }
255264
is_type_alias_impl_trait => {

compiler/rustc_metadata/src/rmeta/encoder.rs

+9-5
Original file line numberDiff line numberDiff line change
@@ -1045,11 +1045,9 @@ fn should_encode_mir(
10451045
(true, mir_opt_base)
10461046
}
10471047
// Constants
1048-
DefKind::AnonConst
1049-
| DefKind::InlineConst
1050-
| DefKind::AssocConst
1051-
| DefKind::Static(..)
1052-
| DefKind::Const => (true, false),
1048+
DefKind::AnonConst | DefKind::InlineConst | DefKind::AssocConst | DefKind::Const => {
1049+
(true, false)
1050+
}
10531051
// Coroutines require optimized MIR to compute layout.
10541052
DefKind::Closure if tcx.is_coroutine(def_id.to_def_id()) => (false, true),
10551053
// Full-fledged functions + closures
@@ -1454,6 +1452,12 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
14541452
.coroutine_for_closure
14551453
.set_some(def_id.index, self.tcx.coroutine_for_closure(def_id).into());
14561454
}
1455+
if let DefKind::Static(_) = def_kind {
1456+
if !self.tcx.is_foreign_item(def_id) {
1457+
let data = self.tcx.eval_static_initializer_raw(def_id).unwrap();
1458+
record!(self.tables.eval_static_initializer_raw[def_id] <- data);
1459+
}
1460+
}
14571461
if let DefKind::Enum | DefKind::Struct | DefKind::Union = def_kind {
14581462
self.encode_info_for_adt(local_id);
14591463
}

compiler/rustc_metadata/src/rmeta/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,7 @@ define_tables! {
443443
fn_arg_names: Table<DefIndex, LazyArray<Ident>>,
444444
coroutine_kind: Table<DefIndex, hir::CoroutineKind>,
445445
coroutine_for_closure: Table<DefIndex, RawDefId>,
446+
eval_static_initializer_raw: Table<DefIndex, LazyValue<mir::interpret::AllocId>>,
446447
trait_def: Table<DefIndex, LazyValue<ty::TraitDef>>,
447448
trait_item_def_id: Table<DefIndex, RawDefId>,
448449
expn_that_defined: Table<DefIndex, LazyValue<ExpnId>>,

compiler/rustc_middle/src/query/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1079,6 +1079,7 @@ rustc_queries! {
10791079
tcx.def_path_str(key)
10801080
}
10811081
cache_on_disk_if { key.is_local() }
1082+
separate_provide_extern
10821083
}
10831084

10841085
/// Evaluates const items or anonymous constants

compiler/rustc_middle/src/ty/parameterized.rs

+1
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ trivially_parameterized_over_tcx! {
6363
crate::middle::lib_features::FeatureStability,
6464
crate::middle::resolve_bound_vars::ObjectLifetimeDefault,
6565
crate::mir::ConstQualifs,
66+
crate::mir::interpret::AllocId,
6667
ty::AssocItemContainer,
6768
ty::Asyncness,
6869
ty::DeducedParamAttrs,

0 commit comments

Comments
 (0)