Skip to content

Commit 24cd427

Browse files
authored
Rollup merge of #72146 - Mark-Simulacrum:separate-std-asserts, r=alexcrichton
Provide separate option for std debug asserts On local one-off benchmarking of libcore metadata-only, debug asserts in std are a significant hit (15s to 20s). Provide an option for compiler developers to disable them. A build with a nightly compiler is around 10s, for reference.
2 parents d01ee6f + 6c41545 commit 24cd427

File tree

3 files changed

+18
-1
lines changed

3 files changed

+18
-1
lines changed

config.toml.example

+4
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,10 @@
314314
# library.
315315
#debug-assertions = false
316316

317+
# Whether or not debug assertions are enabled for the standard library.
318+
# Overrides the `debug-assertions` option, if defined.
319+
#debug-assertions-std = false
320+
317321
# Debuginfo level for most of Rust code, corresponds to the `-C debuginfo=N` option of `rustc`.
318322
# `0` - no debug info
319323
# `1` - line tables only

src/bootstrap/builder.rs

+8-1
Original file line numberDiff line numberDiff line change
@@ -915,7 +915,14 @@ impl<'a> Builder<'a> {
915915
.env("RUSTC", self.out.join("bootstrap/debug/rustc"))
916916
.env("RUSTC_REAL", self.rustc(compiler))
917917
.env("RUSTC_STAGE", stage.to_string())
918-
.env("RUSTC_DEBUG_ASSERTIONS", self.config.rust_debug_assertions.to_string())
918+
.env(
919+
"RUSTC_DEBUG_ASSERTIONS",
920+
if mode == Mode::Std {
921+
self.config.rust_debug_assertions_std.to_string()
922+
} else {
923+
self.config.rust_debug_assertions.to_string()
924+
},
925+
)
919926
.env("RUSTC_SYSROOT", &sysroot)
920927
.env("RUSTC_LIBDIR", &libdir)
921928
.env("RUSTDOC", self.out.join("bootstrap/debug/rustdoc"))

src/bootstrap/config.rs

+6
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ pub struct Config {
9797
pub rust_codegen_units: Option<u32>,
9898
pub rust_codegen_units_std: Option<u32>,
9999
pub rust_debug_assertions: bool,
100+
pub rust_debug_assertions_std: bool,
100101
pub rust_debuginfo_level_rustc: u32,
101102
pub rust_debuginfo_level_std: u32,
102103
pub rust_debuginfo_level_tools: u32,
@@ -314,6 +315,7 @@ struct Rust {
314315
codegen_units: Option<u32>,
315316
codegen_units_std: Option<u32>,
316317
debug_assertions: Option<bool>,
318+
debug_assertions_std: Option<bool>,
317319
debuginfo_level: Option<u32>,
318320
debuginfo_level_rustc: Option<u32>,
319321
debuginfo_level_std: Option<u32>,
@@ -518,6 +520,7 @@ impl Config {
518520
let mut llvm_assertions = None;
519521
let mut debug = None;
520522
let mut debug_assertions = None;
523+
let mut debug_assertions_std = None;
521524
let mut debuginfo_level = None;
522525
let mut debuginfo_level_rustc = None;
523526
let mut debuginfo_level_std = None;
@@ -560,6 +563,7 @@ impl Config {
560563
if let Some(ref rust) = toml.rust {
561564
debug = rust.debug;
562565
debug_assertions = rust.debug_assertions;
566+
debug_assertions_std = rust.debug_assertions_std;
563567
debuginfo_level = rust.debuginfo_level;
564568
debuginfo_level_rustc = rust.debuginfo_level_rustc;
565569
debuginfo_level_std = rust.debuginfo_level_std;
@@ -658,6 +662,8 @@ impl Config {
658662

659663
let default = debug == Some(true);
660664
config.rust_debug_assertions = debug_assertions.unwrap_or(default);
665+
config.rust_debug_assertions_std =
666+
debug_assertions_std.unwrap_or(config.rust_debug_assertions);
661667

662668
let with_defaults = |debuginfo_level_specific: Option<u32>| {
663669
debuginfo_level_specific.or(debuginfo_level).unwrap_or(if debug == Some(true) {

0 commit comments

Comments
 (0)