diff options
| author | Jubilee Young <workingjubilee@gmail.com> | 2024-05-14 12:26:01 -0700 |
|---|---|---|
| committer | Jubilee Young <workingjubilee@gmail.com> | 2024-06-23 00:36:34 -0700 |
| commit | 598e265d43db1ef980679d94702173b61de71c3f (patch) | |
| tree | 35fb706dc9c70ec258f7370d72eecef697e3eaa8 /compiler/rustc_session/src | |
| parent | 7d160ae61a778da53256d1a02c711c4bfa693c34 (diff) | |
compiler: Accept -Cforce-frame-pointers=always
Also lands behind -Zunstable-options, for now. Take the opportunity to do some mild cleanup.
Diffstat (limited to 'compiler/rustc_session/src')
| -rw-r--r-- | compiler/rustc_session/src/config.rs | 2 | ||||
| -rw-r--r-- | compiler/rustc_session/src/options.rs | 19 |
2 files changed, 10 insertions, 11 deletions
diff --git a/compiler/rustc_session/src/config.rs b/compiler/rustc_session/src/config.rs index f4e24cd4606..839cc51efce 100644 --- a/compiler/rustc_session/src/config.rs +++ b/compiler/rustc_session/src/config.rs @@ -2528,7 +2528,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 75f0e9a616c..933bae793f8 100644 --- a/compiler/rustc_session/src/options.rs +++ b/compiler/rustc_session/src/options.rs @@ -373,8 +373,7 @@ mod desc { pub const parse_opt_comma_list: &str = parse_comma_list; 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`"; + pub const parse_frame_pointer: &str = "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`"; @@ -674,15 +673,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 { |
