rename -Ztrait-solver
to -Znext-solver
This commit is contained in:
parent
1aa6aefdc9
commit
5d97ada1ec
8 changed files with 102 additions and 89 deletions
|
@ -755,13 +755,14 @@ pub enum PrintKind {
|
|||
}
|
||||
|
||||
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
|
||||
pub enum TraitSolver {
|
||||
/// Classic trait solver in `rustc_trait_selection::traits::select`
|
||||
Classic,
|
||||
/// Experimental trait solver in `rustc_trait_selection::solve`
|
||||
Next,
|
||||
/// Use the new trait solver during coherence
|
||||
NextCoherence,
|
||||
pub struct NextSolverConfig {
|
||||
/// Whether the new trait solver should be enabled in coherence.
|
||||
pub coherence: bool,
|
||||
/// Whether the new trait solver should be enabled everywhere.
|
||||
/// This is only `true` if `coherence` is also enabled.
|
||||
pub globally: bool,
|
||||
/// Whether to dump proof trees after computing a proof tree.
|
||||
pub dump_tree: DumpSolverProofTree,
|
||||
}
|
||||
|
||||
#[derive(Default, Debug, Copy, Clone, Hash, PartialEq, Eq)]
|
||||
|
@ -3220,10 +3221,10 @@ pub(crate) mod dep_tracking {
|
|||
use super::{
|
||||
BranchProtection, CFGuard, CFProtection, CrateType, DebugInfo, DebugInfoCompression,
|
||||
ErrorOutputType, FunctionReturn, InliningThreshold, InstrumentCoverage, InstrumentXRay,
|
||||
LinkerPluginLto, LocationDetail, LtoCli, OomStrategy, OptLevel, OutFileName, OutputType,
|
||||
OutputTypes, Polonius, RemapPathScopeComponents, ResolveDocLinks, SourceFileHashAlgorithm,
|
||||
SplitDwarfKind, SwitchWithOptPath, SymbolManglingVersion, TraitSolver, TrimmedDefPaths,
|
||||
WasiExecModel,
|
||||
LinkerPluginLto, LocationDetail, LtoCli, NextSolverConfig, OomStrategy, OptLevel,
|
||||
OutFileName, OutputType, OutputTypes, Polonius, RemapPathScopeComponents, ResolveDocLinks,
|
||||
SourceFileHashAlgorithm, SplitDwarfKind, SwitchWithOptPath, SymbolManglingVersion,
|
||||
TrimmedDefPaths, WasiExecModel,
|
||||
};
|
||||
use crate::lint;
|
||||
use crate::utils::NativeLib;
|
||||
|
@ -3326,7 +3327,7 @@ pub(crate) mod dep_tracking {
|
|||
BranchProtection,
|
||||
OomStrategy,
|
||||
LanguageIdentifier,
|
||||
TraitSolver,
|
||||
NextSolverConfig,
|
||||
Polonius,
|
||||
InliningThreshold,
|
||||
FunctionReturn,
|
||||
|
|
|
@ -396,8 +396,7 @@ mod desc {
|
|||
pub const parse_instrument_xray: &str = "either a boolean (`yes`, `no`, `on`, `off`, etc), or a comma separated list of settings: `always` or `never` (mutually exclusive), `ignore-loops`, `instruction-threshold=N`, `skip-entry`, `skip-exit`";
|
||||
pub const parse_unpretty: &str = "`string` or `string=string`";
|
||||
pub const parse_treat_err_as_bug: &str = "either no value or a non-negative number";
|
||||
pub const parse_trait_solver: &str =
|
||||
"one of the supported solver modes (`classic`, `next`, or `next-coherence`)";
|
||||
pub const parse_next_solver_config: &str = "a comma separated list of solver configurations: `globally` (default), `coherence`, `dump-tree`, `dump-tree-on-error";
|
||||
pub const parse_lto: &str =
|
||||
"either a boolean (`yes`, `no`, `on`, `off`, etc), `thin`, `fat`, or omitted";
|
||||
pub const parse_linker_plugin_lto: &str =
|
||||
|
@ -429,7 +428,6 @@ mod desc {
|
|||
"a `,` separated combination of `bti`, `b-key`, `pac-ret`, or `leaf`";
|
||||
pub const parse_proc_macro_execution_strategy: &str =
|
||||
"one of supported execution strategies (`same-thread`, or `cross-thread`)";
|
||||
pub const parse_dump_solver_proof_tree: &str = "one of: `always`, `on-request`, `on-error`";
|
||||
pub const parse_remap_path_scope: &str = "comma separated list of scopes: `macro`, `diagnostics`, `unsplit-debuginfo`, `split-debuginfo`, `split-debuginfo-path`, `object`, `all`";
|
||||
pub const parse_inlining_threshold: &str =
|
||||
"either a boolean (`yes`, `no`, `on`, `off`, etc), or a non-negative number";
|
||||
|
@ -1032,15 +1030,48 @@ mod parse {
|
|||
}
|
||||
}
|
||||
|
||||
pub(crate) fn parse_trait_solver(slot: &mut TraitSolver, v: Option<&str>) -> bool {
|
||||
match v {
|
||||
Some("classic") => *slot = TraitSolver::Classic,
|
||||
Some("next") => *slot = TraitSolver::Next,
|
||||
Some("next-coherence") => *slot = TraitSolver::NextCoherence,
|
||||
// default trait solver is subject to change..
|
||||
Some("default") => *slot = TraitSolver::Classic,
|
||||
_ => return false,
|
||||
pub(crate) fn parse_next_solver_config(
|
||||
slot: &mut Option<NextSolverConfig>,
|
||||
v: Option<&str>,
|
||||
) -> bool {
|
||||
if let Some(config) = v {
|
||||
let mut coherence = false;
|
||||
let mut globally = true;
|
||||
let mut dump_tree = None;
|
||||
for c in config.split(',') {
|
||||
match c {
|
||||
"globally" => globally = true,
|
||||
"coherence" => {
|
||||
globally = false;
|
||||
coherence = true;
|
||||
}
|
||||
"dump-tree" => {
|
||||
if dump_tree.replace(DumpSolverProofTree::Always).is_some() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
"dump-tree-on-error" => {
|
||||
if dump_tree.replace(DumpSolverProofTree::OnError).is_some() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
_ => return false,
|
||||
}
|
||||
}
|
||||
|
||||
*slot = Some(NextSolverConfig {
|
||||
coherence: coherence || globally,
|
||||
globally,
|
||||
dump_tree: dump_tree.unwrap_or_default(),
|
||||
});
|
||||
} else {
|
||||
*slot = Some(NextSolverConfig {
|
||||
coherence: true,
|
||||
globally: true,
|
||||
dump_tree: Default::default(),
|
||||
});
|
||||
}
|
||||
|
||||
true
|
||||
}
|
||||
|
||||
|
@ -1305,19 +1336,6 @@ mod parse {
|
|||
true
|
||||
}
|
||||
|
||||
pub(crate) fn parse_dump_solver_proof_tree(
|
||||
slot: &mut DumpSolverProofTree,
|
||||
v: Option<&str>,
|
||||
) -> bool {
|
||||
match v {
|
||||
None | Some("always") => *slot = DumpSolverProofTree::Always,
|
||||
Some("never") => *slot = DumpSolverProofTree::Never,
|
||||
Some("on-error") => *slot = DumpSolverProofTree::OnError,
|
||||
_ => return false,
|
||||
};
|
||||
true
|
||||
}
|
||||
|
||||
pub(crate) fn parse_inlining_threshold(slot: &mut InliningThreshold, v: Option<&str>) -> bool {
|
||||
match v {
|
||||
Some("always" | "yes") => {
|
||||
|
@ -1591,9 +1609,6 @@ options! {
|
|||
"output statistics about monomorphization collection"),
|
||||
dump_mono_stats_format: DumpMonoStatsFormat = (DumpMonoStatsFormat::Markdown, parse_dump_mono_stats, [UNTRACKED],
|
||||
"the format to use for -Z dump-mono-stats (`markdown` (default) or `json`)"),
|
||||
dump_solver_proof_tree: DumpSolverProofTree = (DumpSolverProofTree::Never, parse_dump_solver_proof_tree, [UNTRACKED],
|
||||
"dump a proof tree for every goal evaluated by the new trait solver. If the flag is specified without any options after it
|
||||
then it defaults to `always`. If the flag is not specified at all it defaults to `on-request`."),
|
||||
dwarf_version: Option<u32> = (None, parse_opt_number, [TRACKED],
|
||||
"version of DWARF debug information to emit (default: 2 or 4, depending on platform)"),
|
||||
dylib_lto: bool = (false, parse_bool, [UNTRACKED],
|
||||
|
@ -1722,6 +1737,8 @@ options! {
|
|||
"the size at which the `large_assignments` lint starts to be emitted"),
|
||||
mutable_noalias: bool = (true, parse_bool, [TRACKED],
|
||||
"emit noalias metadata for mutable references (default: yes)"),
|
||||
next_solver: Option<NextSolverConfig> = (None, parse_next_solver_config, [TRACKED],
|
||||
"enable and configure the next generation trait solver used by rustc"),
|
||||
nll_facts: bool = (false, parse_bool, [UNTRACKED],
|
||||
"dump facts from NLL analysis into side files (default: no)"),
|
||||
nll_facts_dir: String = ("nll-facts".to_string(), parse_string, [UNTRACKED],
|
||||
|
@ -1922,8 +1939,6 @@ written to standard error output)"),
|
|||
"for every macro invocation, print its name and arguments (default: no)"),
|
||||
track_diagnostics: bool = (false, parse_bool, [UNTRACKED],
|
||||
"tracks where in rustc a diagnostic was emitted"),
|
||||
trait_solver: TraitSolver = (TraitSolver::Classic, parse_trait_solver, [TRACKED],
|
||||
"specify the trait solver mode used by rustc (default: classic)"),
|
||||
// Diagnostics are considered side-effects of a query (see `QuerySideEffects`) and are saved
|
||||
// alongside query results and changes to translation options can affect diagnostics - so
|
||||
// translation options should be tracked.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue