Allow -Z treat-err-as-bug=0
Co-authored-by: Vadim Petrochenkov <vadim.petrochenkov@gmail.com>
This commit is contained in:
parent
5a4e47ebed
commit
3dd0419ea9
@ -519,7 +519,7 @@ pub struct HandlerFlags {
|
|||||||
/// If false, warning-level lints are suppressed.
|
/// If false, warning-level lints are suppressed.
|
||||||
/// (rustc: see `--allow warnings` and `--cap-lints`)
|
/// (rustc: see `--allow warnings` and `--cap-lints`)
|
||||||
pub can_emit_warnings: bool,
|
pub can_emit_warnings: bool,
|
||||||
/// If true, error-level diagnostics are upgraded to bug-level.
|
/// If Some, the Nth error-level diagnostic is upgraded to bug-level.
|
||||||
/// (rustc: see `-Z treat-err-as-bug`)
|
/// (rustc: see `-Z treat-err-as-bug`)
|
||||||
pub treat_err_as_bug: Option<NonZeroUsize>,
|
pub treat_err_as_bug: Option<NonZeroUsize>,
|
||||||
/// If true, immediately emit diagnostics that would otherwise be buffered.
|
/// If true, immediately emit diagnostics that would otherwise be buffered.
|
||||||
@ -1719,19 +1719,17 @@ fn panic_if_treat_err_as_bug(&self) {
|
|||||||
match (
|
match (
|
||||||
self.err_count() + self.lint_err_count,
|
self.err_count() + self.lint_err_count,
|
||||||
self.delayed_bug_count(),
|
self.delayed_bug_count(),
|
||||||
self.flags.treat_err_as_bug.map(|c| c.get()).unwrap_or(0),
|
self.flags.treat_err_as_bug.map(|c| c.get()).unwrap(),
|
||||||
) {
|
) {
|
||||||
(1, 0, 1) => panic!("aborting due to `-Z treat-err-as-bug=1`"),
|
(1, 0, 1) => panic!("aborting due to `-Z treat-err-as-bug=1`"),
|
||||||
(0, 1, 1) => panic!("aborting due delayed bug with `-Z treat-err-as-bug=1`"),
|
(0, 1, 1) => panic!("aborting due delayed bug with `-Z treat-err-as-bug=1`"),
|
||||||
(count, delayed_count, as_bug) => {
|
(count, delayed_count, val) => {
|
||||||
if delayed_count > 0 {
|
if delayed_count > 0 {
|
||||||
panic!(
|
panic!(
|
||||||
"aborting after {count} errors and {delayed_count} delayed bugs due to `-Z treat-err-as-bug={as_bug}`",
|
"aborting after {count} errors and {delayed_count} delayed bugs due to `-Z treat-err-as-bug={val}`",
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
panic!(
|
panic!("aborting after {count} errors due to `-Z treat-err-as-bug={val}`")
|
||||||
"aborting after {count} errors due to `-Z treat-err-as-bug={as_bug}`",
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
use std::collections::hash_map::DefaultHasher;
|
use std::collections::hash_map::DefaultHasher;
|
||||||
use std::hash::Hasher;
|
use std::hash::Hasher;
|
||||||
use std::num::NonZeroUsize;
|
use std::num::{IntErrorKind, NonZeroUsize};
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::str;
|
use std::str;
|
||||||
|
|
||||||
@ -387,7 +387,7 @@ mod desc {
|
|||||||
"`all` (default), `except-unused-generics`, `except-unused-functions`, or `off`";
|
"`all` (default), `except-unused-generics`, `except-unused-functions`, or `off`";
|
||||||
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_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_unpretty: &str = "`string` or `string=string`";
|
||||||
pub const parse_treat_err_as_bug: &str = "either no value or a number bigger than 0";
|
pub const parse_treat_err_as_bug: &str = "either no value or a non-negative number";
|
||||||
pub const parse_trait_solver: &str =
|
pub const parse_trait_solver: &str =
|
||||||
"one of the supported solver modes (`classic`, `next`, or `next-coherence`)";
|
"one of the supported solver modes (`classic`, `next`, or `next-coherence`)";
|
||||||
pub const parse_lto: &str =
|
pub const parse_lto: &str =
|
||||||
@ -986,10 +986,16 @@ pub(crate) fn parse_instrument_xray(
|
|||||||
|
|
||||||
pub(crate) fn parse_treat_err_as_bug(slot: &mut Option<NonZeroUsize>, v: Option<&str>) -> bool {
|
pub(crate) fn parse_treat_err_as_bug(slot: &mut Option<NonZeroUsize>, v: Option<&str>) -> bool {
|
||||||
match v {
|
match v {
|
||||||
Some(s) => {
|
Some(s) => match s.parse() {
|
||||||
*slot = s.parse().ok();
|
Ok(val) => {
|
||||||
slot.is_some()
|
*slot = Some(val);
|
||||||
}
|
true
|
||||||
|
}
|
||||||
|
Err(e) => {
|
||||||
|
*slot = None;
|
||||||
|
e.kind() == &IntErrorKind::Zero
|
||||||
|
}
|
||||||
|
},
|
||||||
None => {
|
None => {
|
||||||
*slot = NonZeroUsize::new(1);
|
*slot = NonZeroUsize::new(1);
|
||||||
true
|
true
|
||||||
@ -1846,7 +1852,8 @@ pub(crate) fn parse_dump_solver_proof_tree(
|
|||||||
trap_unreachable: Option<bool> = (None, parse_opt_bool, [TRACKED],
|
trap_unreachable: Option<bool> = (None, parse_opt_bool, [TRACKED],
|
||||||
"generate trap instructions for unreachable intrinsics (default: use target setting, usually yes)"),
|
"generate trap instructions for unreachable intrinsics (default: use target setting, usually yes)"),
|
||||||
treat_err_as_bug: Option<NonZeroUsize> = (None, parse_treat_err_as_bug, [TRACKED],
|
treat_err_as_bug: Option<NonZeroUsize> = (None, parse_treat_err_as_bug, [TRACKED],
|
||||||
"treat error number `val` that occurs as bug"),
|
"treat the `val`th error that occurs as bug (default if not specified: 0 - don't treat errors as bugs. \
|
||||||
|
default if specified without a value: 1 - treat the first error as bug)"),
|
||||||
trim_diagnostic_paths: bool = (true, parse_bool, [UNTRACKED],
|
trim_diagnostic_paths: bool = (true, parse_bool, [UNTRACKED],
|
||||||
"in diagnostics, use heuristics to shorten paths referring to items"),
|
"in diagnostics, use heuristics to shorten paths referring to items"),
|
||||||
tune_cpu: Option<String> = (None, parse_opt_string, [TRACKED],
|
tune_cpu: Option<String> = (None, parse_opt_string, [TRACKED],
|
||||||
|
Loading…
Reference in New Issue
Block a user