From f5ad1164ef68671277aae03b74565507e5fcb0e0 Mon Sep 17 00:00:00 2001 From: Jubilee Young Date: Tue, 14 May 2024 12:26:01 -0700 Subject: [PATCH] Accept -Cforce-frame-pointers=always Also lands behind -Zunstable-options, for now. Take the opportunity to do some mild cleanup. --- compiler/rustc_session/src/config.rs | 2 +- compiler/rustc_session/src/options.rs | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/compiler/rustc_session/src/config.rs b/compiler/rustc_session/src/config.rs index e749c446ac252..dd18b75057a79 100644 --- a/compiler/rustc_session/src/config.rs +++ b/compiler/rustc_session/src/config.rs @@ -2472,7 +2472,7 @@ pub fn build_session_options(early_dcx: &mut EarlyDiagCtxt, matches: &getopts::M && cg.force_frame_pointers == FramePointer::NonLeaf { early_dcx.early_fatal( - "`-Cforce-frame-pointers=non-leaf` also requires `-Zunstable-options` \ + "`-Cforce-frame-pointers=non-leaf` or `always` also requires `-Zunstable-options` \ and a nightly compiler", ) } diff --git a/compiler/rustc_session/src/options.rs b/compiler/rustc_session/src/options.rs index 90e8660c6c82f..b8b5981ad1fa0 100644 --- a/compiler/rustc_session/src/options.rs +++ b/compiler/rustc_session/src/options.rs @@ -374,7 +374,7 @@ mod desc { pub const parse_number: &str = "a number"; pub const parse_opt_number: &str = parse_number; pub const parse_frame_pointer: &str = - "one of `true`/`yes`/`on`, `false`/`no`/`off`, or (with -Zunstable-options) `non-leaf`"; + "one of `true`/`yes`/`on`, `false`/`no`/`off`, or (with -Zunstable-options) `non-leaf` or `always`"; pub const parse_threads: &str = parse_number; pub const parse_time_passes_format: &str = "`text` (default) or `json`"; pub const parse_passes: &str = "a space-separated list of passes, or `all`"; @@ -672,15 +672,15 @@ mod parse { } pub(crate) fn parse_frame_pointer(slot: &mut FramePointer, v: Option<&str>) -> bool { - let mut boolish = false; - let mut is_parsed = parse_bool(&mut boolish, v); - if boolish & is_parsed { - *slot = FramePointer::Always; - } else if v == Some("non-leaf") { - is_parsed = true; - *slot = FramePointer::NonLeaf; + let mut yes = false; + match v { + Some(_) if parse_bool(&mut yes, v) && yes => slot.ratchet(FramePointer::Always), + Some(_) if parse_bool(&mut yes, v) => slot.ratchet(FramePointer::MayOmit), + Some("always") => slot.ratchet(FramePointer::Always), + Some("non-leaf") => slot.ratchet(FramePointer::NonLeaf), + _ => return false, }; - is_parsed + true } pub(crate) fn parse_passes(slot: &mut Passes, v: Option<&str>) -> bool {