collector: recursively traverse 'mentioned' items to evaluate their constants
This commit is contained in:
parent
d31b6fb8c0
commit
712fe36611
24 changed files with 641 additions and 142 deletions
|
@ -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.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue