1
Fork 0

collector: recursively traverse 'mentioned' items to evaluate their constants

This commit is contained in:
Ralf Jung 2024-03-15 21:06:40 +01:00
parent d31b6fb8c0
commit 712fe36611
24 changed files with 641 additions and 142 deletions

View file

@ -117,7 +117,7 @@ use rustc_session::CodegenUnits;
use rustc_span::symbol::Symbol;
use crate::collector::UsageMap;
use crate::collector::{self, MonoItemCollectionMode};
use crate::collector::{self, MonoItemCollectionStrategy};
use crate::errors::{CouldntDumpMonoStats, SymbolAlreadyDefined, UnknownCguCollectionMode};
struct PartitioningCx<'a, 'tcx> {
@ -1087,30 +1087,30 @@ where
}
fn collect_and_partition_mono_items(tcx: TyCtxt<'_>, (): ()) -> (&DefIdSet, &[CodegenUnit<'_>]) {
let collection_mode = match tcx.sess.opts.unstable_opts.print_mono_items {
let collection_strategy = match tcx.sess.opts.unstable_opts.print_mono_items {
Some(ref s) => {
let mode = s.to_lowercase();
let mode = mode.trim();
if mode == "eager" {
MonoItemCollectionMode::Eager
MonoItemCollectionStrategy::Eager
} else {
if mode != "lazy" {
tcx.dcx().emit_warn(UnknownCguCollectionMode { mode });
}
MonoItemCollectionMode::Lazy
MonoItemCollectionStrategy::Lazy
}
}
None => {
if tcx.sess.link_dead_code() {
MonoItemCollectionMode::Eager
MonoItemCollectionStrategy::Eager
} else {
MonoItemCollectionMode::Lazy
MonoItemCollectionStrategy::Lazy
}
}
};
let (items, usage_map) = collector::collect_crate_mono_items(tcx, collection_mode);
let (items, usage_map) = collector::collect_crate_mono_items(tcx, collection_strategy);
// If there was an error during collection (e.g. from one of the constants we evaluated),
// then we stop here. This way codegen does not have to worry about failing constants.