Skip to content

Commit 7a7456d

Browse files
committed
Store static initializers in metadata instead of the MIR of statics.
1 parent 2fde99e commit 7a7456d

File tree

5 files changed

+21
-5
lines changed

5 files changed

+21
-5
lines changed

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

+9
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,15 @@ provide! { tcx, def_id, other, cdata,
242242
asyncness => { table_direct }
243243
fn_arg_names => { table }
244244
generator_kind => { table }
245+
eval_static_initializer_raw => {
246+
Ok(cdata
247+
.root
248+
.tables
249+
.eval_static_initializer_raw
250+
.get(cdata, def_id.index)
251+
.map(|lazy| lazy.decode((cdata, tcx)))
252+
.unwrap_or_else(|| panic!("{def_id:?} does not have eval_static_initializer_raw")))
253+
}
245254
trait_def => { table }
246255
deduced_param_attrs => { table }
247256
is_type_alias_impl_trait => {

compiler/rustc_metadata/src/rmeta/encoder.rs

+9-5
Original file line numberDiff line numberDiff line change
@@ -1034,11 +1034,9 @@ fn should_encode_mir(
10341034
(true, mir_opt_base)
10351035
}
10361036
// Constants
1037-
DefKind::AnonConst
1038-
| DefKind::InlineConst
1039-
| DefKind::AssocConst
1040-
| DefKind::Static(..)
1041-
| DefKind::Const => (true, false),
1037+
DefKind::AnonConst | DefKind::InlineConst | DefKind::AssocConst | DefKind::Const => {
1038+
(true, false)
1039+
}
10421040
// Full-fledged functions + closures
10431041
DefKind::AssocFn | DefKind::Fn | DefKind::Closure => {
10441042
let generics = tcx.generics_of(def_id);
@@ -1439,6 +1437,12 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
14391437
let data = self.tcx.generator_kind(def_id).unwrap();
14401438
record!(self.tables.generator_kind[def_id] <- data);
14411439
}
1440+
if let DefKind::Static(_) = def_kind {
1441+
if !self.tcx.is_foreign_item(def_id) {
1442+
let data = self.tcx.eval_static_initializer_raw(def_id).unwrap();
1443+
record!(self.tables.eval_static_initializer_raw[def_id] <- data);
1444+
}
1445+
}
14421446
if let DefKind::Enum | DefKind::Struct | DefKind::Union = def_kind {
14431447
self.encode_info_for_adt(local_id);
14441448
}

compiler/rustc_metadata/src/rmeta/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -442,6 +442,7 @@ define_tables! {
442442
asyncness: Table<DefIndex, ty::Asyncness>,
443443
fn_arg_names: Table<DefIndex, LazyArray<Ident>>,
444444
generator_kind: Table<DefIndex, LazyValue<hir::GeneratorKind>>,
445+
eval_static_initializer_raw: Table<DefIndex, LazyValue<mir::interpret::AllocId>>,
445446
trait_def: Table<DefIndex, LazyValue<ty::TraitDef>>,
446447
trait_item_def_id: Table<DefIndex, RawDefId>,
447448
expn_that_defined: Table<DefIndex, LazyValue<ExpnId>>,

compiler/rustc_middle/src/query/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1081,6 +1081,7 @@ rustc_queries! {
10811081
tcx.def_path_str(key)
10821082
}
10831083
cache_on_disk_if { true }
1084+
separate_provide_extern
10841085
}
10851086

10861087
/// Evaluates const items or anonymous constants

compiler/rustc_middle/src/ty/parameterized.rs

+1
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ trivially_parameterized_over_tcx! {
6161
crate::middle::exported_symbols::SymbolExportInfo,
6262
crate::middle::resolve_bound_vars::ObjectLifetimeDefault,
6363
crate::mir::ConstQualifs,
64+
crate::mir::interpret::AllocId,
6465
ty::AssocItemContainer,
6566
ty::Asyncness,
6667
ty::DeducedParamAttrs,

0 commit comments

Comments
 (0)