1
Fork 0

Replace TrimmedDefPaths with a bool.

It's a tri-state enum but the `Always` variant is never used, so a bool
is simpler.
This commit is contained in:
Nicholas Nethercote 2024-01-10 12:47:22 +11:00
parent 086d17b7cb
commit 32de78cade
4 changed files with 17 additions and 35 deletions

View file

@ -35,7 +35,7 @@ use rustc_lint::unerased_lint_store;
use rustc_metadata::creader::MetadataLoader; use rustc_metadata::creader::MetadataLoader;
use rustc_metadata::locator; use rustc_metadata::locator;
use rustc_session::config::{nightly_options, CG_OPTIONS, Z_OPTIONS}; use rustc_session::config::{nightly_options, CG_OPTIONS, Z_OPTIONS};
use rustc_session::config::{ErrorOutputType, Input, OutFileName, OutputType, TrimmedDefPaths}; use rustc_session::config::{ErrorOutputType, Input, OutFileName, OutputType};
use rustc_session::getopts::{self, Matches}; use rustc_session::getopts::{self, Matches};
use rustc_session::lint::{Lint, LintId}; use rustc_session::lint::{Lint, LintId};
use rustc_session::{config, EarlyDiagCtxt, Session}; use rustc_session::{config, EarlyDiagCtxt, Session};
@ -204,7 +204,7 @@ impl Callbacks for TimePassesCallbacks {
// //
self.time_passes = (config.opts.prints.is_empty() && config.opts.unstable_opts.time_passes) self.time_passes = (config.opts.prints.is_empty() && config.opts.unstable_opts.time_passes)
.then(|| config.opts.unstable_opts.time_passes_format); .then(|| config.opts.unstable_opts.time_passes_format);
config.opts.trimmed_def_paths = TrimmedDefPaths::GoodPath; config.opts.trimmed_def_paths = true;
} }
} }

View file

@ -15,7 +15,6 @@ use rustc_hir::def::{self, CtorKind, DefKind, Namespace};
use rustc_hir::def_id::{DefIdMap, DefIdSet, ModDefId, CRATE_DEF_ID, LOCAL_CRATE}; use rustc_hir::def_id::{DefIdMap, DefIdSet, ModDefId, CRATE_DEF_ID, LOCAL_CRATE};
use rustc_hir::definitions::{DefKey, DefPathDataName}; use rustc_hir::definitions::{DefKey, DefPathDataName};
use rustc_hir::LangItem; use rustc_hir::LangItem;
use rustc_session::config::TrimmedDefPaths;
use rustc_session::cstore::{ExternCrate, ExternCrateSource}; use rustc_session::cstore::{ExternCrate, ExternCrateSource};
use rustc_session::Limit; use rustc_session::Limit;
use rustc_span::symbol::{kw, Ident, Symbol}; use rustc_span::symbol::{kw, Ident, Symbol};
@ -369,7 +368,7 @@ pub trait PrettyPrinter<'tcx>: Printer<'tcx> + fmt::Write {
return Ok(true); return Ok(true);
} }
if self.tcx().sess.opts.unstable_opts.trim_diagnostic_paths if self.tcx().sess.opts.unstable_opts.trim_diagnostic_paths
&& !matches!(self.tcx().sess.opts.trimmed_def_paths, TrimmedDefPaths::Never) && self.tcx().sess.opts.trimmed_def_paths
&& !with_no_trimmed_paths() && !with_no_trimmed_paths()
&& !with_crate_prefix() && !with_crate_prefix()
&& let Some(symbol) = self.tcx().trimmed_def_paths(()).get(&def_id) && let Some(symbol) = self.tcx().trimmed_def_paths(()).get(&def_id)
@ -3073,18 +3072,16 @@ fn for_each_def(tcx: TyCtxt<'_>, mut collect_fn: impl for<'b> FnMut(&'b Ident, N
/// See also [`DelayDm`](rustc_error_messages::DelayDm) and [`with_no_trimmed_paths!`]. /// See also [`DelayDm`](rustc_error_messages::DelayDm) and [`with_no_trimmed_paths!`].
// this is pub to be able to intra-doc-link it // this is pub to be able to intra-doc-link it
pub fn trimmed_def_paths(tcx: TyCtxt<'_>, (): ()) -> DefIdMap<Symbol> { pub fn trimmed_def_paths(tcx: TyCtxt<'_>, (): ()) -> DefIdMap<Symbol> {
let mut map: DefIdMap<Symbol> = Default::default(); assert!(tcx.sess.opts.trimmed_def_paths);
if let TrimmedDefPaths::GoodPath = tcx.sess.opts.trimmed_def_paths { // Trimming paths is expensive and not optimized, since we expect it to only be used for error
// Trimming paths is expensive and not optimized, since we expect it to only be used for // reporting.
// error reporting. //
// // For good paths causing this bug, the `rustc_middle::ty::print::with_no_trimmed_paths`
// For good paths causing this bug, the `rustc_middle::ty::print::with_no_trimmed_paths` // wrapper can be used to suppress this query, in exchange for full paths being formatted.
// wrapper can be used to suppress this query, in exchange for full paths being formatted. tcx.sess.good_path_delayed_bug(
tcx.sess.good_path_delayed_bug( "trimmed_def_paths constructed but no error emitted; use `DelayDm` for lints or `with_no_trimmed_paths` for debugging",
"trimmed_def_paths constructed but no error emitted; use `DelayDm` for lints or `with_no_trimmed_paths` for debugging", );
);
}
// Once constructed, unique namespace+symbol pairs will have a `Some(_)` entry, while // Once constructed, unique namespace+symbol pairs will have a `Some(_)` entry, while
// non-unique pairs will have a `None` entry. // non-unique pairs will have a `None` entry.
@ -3118,6 +3115,7 @@ pub fn trimmed_def_paths(tcx: TyCtxt<'_>, (): ()) -> DefIdMap<Symbol> {
}); });
// Put the symbol from all the unique namespace+symbol pairs into `map`. // Put the symbol from all the unique namespace+symbol pairs into `map`.
let mut map: DefIdMap<Symbol> = Default::default();
for ((_, symbol), opt_def_id) in unique_symbols_rev.drain() { for ((_, symbol), opt_def_id) in unique_symbols_rev.drain() {
use std::collections::hash_map::Entry::{Occupied, Vacant}; use std::collections::hash_map::Entry::{Occupied, Vacant};

View file

@ -533,21 +533,6 @@ impl Default for ErrorOutputType {
} }
} }
/// Parameter to control path trimming.
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, Hash)]
pub enum TrimmedDefPaths {
/// `try_print_trimmed_def_path` never prints a trimmed path and never calls the expensive
/// query.
#[default]
Never,
/// `try_print_trimmed_def_path` calls the expensive query, the query doesn't call
/// `good_path_delayed_bug`.
Always,
/// `try_print_trimmed_def_path` calls the expensive query, the query calls
/// `good_path_delayed_bug`.
GoodPath,
}
#[derive(Clone, Hash, Debug)] #[derive(Clone, Hash, Debug)]
pub enum ResolveDocLinks { pub enum ResolveDocLinks {
/// Do not resolve doc links. /// Do not resolve doc links.
@ -1089,7 +1074,7 @@ impl Default for Options {
debug_assertions: true, debug_assertions: true,
actually_rustdoc: false, actually_rustdoc: false,
resolve_doc_links: ResolveDocLinks::None, resolve_doc_links: ResolveDocLinks::None,
trimmed_def_paths: TrimmedDefPaths::default(), trimmed_def_paths: false,
cli_forced_codegen_units: None, cli_forced_codegen_units: None,
cli_forced_local_thinlto_off: false, cli_forced_local_thinlto_off: false,
remap_path_prefix: Vec::new(), remap_path_prefix: Vec::new(),
@ -2926,7 +2911,7 @@ pub fn build_session_options(early_dcx: &mut EarlyDiagCtxt, matches: &getopts::M
debug_assertions, debug_assertions,
actually_rustdoc: false, actually_rustdoc: false,
resolve_doc_links: ResolveDocLinks::ExportedMetadata, resolve_doc_links: ResolveDocLinks::ExportedMetadata,
trimmed_def_paths: TrimmedDefPaths::default(), trimmed_def_paths: false,
cli_forced_codegen_units: codegen_units, cli_forced_codegen_units: codegen_units,
cli_forced_local_thinlto_off: disable_local_thinlto, cli_forced_local_thinlto_off: disable_local_thinlto,
remap_path_prefix, remap_path_prefix,
@ -3210,7 +3195,7 @@ pub(crate) mod dep_tracking {
LinkerPluginLto, LocationDetail, LtoCli, NextSolverConfig, OomStrategy, OptLevel, LinkerPluginLto, LocationDetail, LtoCli, NextSolverConfig, OomStrategy, OptLevel,
OutFileName, OutputType, OutputTypes, Polonius, RemapPathScopeComponents, ResolveDocLinks, OutFileName, OutputType, OutputTypes, Polonius, RemapPathScopeComponents, ResolveDocLinks,
SourceFileHashAlgorithm, SplitDwarfKind, SwitchWithOptPath, SymbolManglingVersion, SourceFileHashAlgorithm, SplitDwarfKind, SwitchWithOptPath, SymbolManglingVersion,
TrimmedDefPaths, WasiExecModel, WasiExecModel,
}; };
use crate::lint; use crate::lint;
use crate::utils::NativeLib; use crate::utils::NativeLib;
@ -3305,7 +3290,6 @@ pub(crate) mod dep_tracking {
SymbolManglingVersion, SymbolManglingVersion,
RemapPathScopeComponents, RemapPathScopeComponents,
SourceFileHashAlgorithm, SourceFileHashAlgorithm,
TrimmedDefPaths,
OutFileName, OutFileName,
OutputType, OutputType,
RealFileName, RealFileName,

View file

@ -183,7 +183,7 @@ top_level_options!(
resolve_doc_links: ResolveDocLinks [TRACKED], resolve_doc_links: ResolveDocLinks [TRACKED],
/// Control path trimming. /// Control path trimming.
trimmed_def_paths: TrimmedDefPaths [TRACKED], trimmed_def_paths: bool [TRACKED],
/// Specifications of codegen units / ThinLTO which are forced as a /// Specifications of codegen units / ThinLTO which are forced as a
/// result of parsing command line options. These are not necessarily /// result of parsing command line options. These are not necessarily