mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-11 06:24:24 +00:00
Rework force-frame-pointer
This reworks the force-frame-pointer PR to explicitly only consider the value of the flag if it is provided, and use a target default otherwise. Something that was tried but not kept was renaming the flag to `frame-pointer`, because for flag `frame-pointer=no`, there is no guarante, that LLVM will elide *all* the frame pointers; oposite of what the literal reading of the flag would suggest.
This commit is contained in:
parent
5b800c231f
commit
09d2db4e96
@ -1053,8 +1053,8 @@ options! {CodegenOptions, CodegenSetter, basic_codegen_options,
|
||||
2 = full debug info with variable and type information"),
|
||||
opt_level: Option<String> = (None, parse_opt_string, [TRACKED],
|
||||
"optimize with possible levels 0-3, s, or z"),
|
||||
force_frame_pointers: bool = (false, parse_bool, [TRACKED],
|
||||
"force frame pointers to be used"),
|
||||
force_frame_pointers: Option<bool> = (None, parse_opt_bool, [TRACKED],
|
||||
"force use of the frame pointers"),
|
||||
debug_assertions: Option<bool> = (None, parse_opt_bool, [TRACKED],
|
||||
"explicitly enable the cfg(debug_assertions) directive"),
|
||||
inline_threshold: Option<usize> = (None, parse_opt_uint, [TRACKED],
|
||||
@ -2968,7 +2968,7 @@ mod tests {
|
||||
assert!(reference.dep_tracking_hash() != opts.dep_tracking_hash());
|
||||
|
||||
opts = reference.clone();
|
||||
opts.cg.force_frame_pointers = true;
|
||||
opts.cg.force_frame_pointers = Some(false);
|
||||
assert!(reference.dep_tracking_hash() != opts.dep_tracking_hash());
|
||||
|
||||
opts = reference.clone();
|
||||
|
@ -658,8 +658,11 @@ impl Session {
|
||||
}
|
||||
|
||||
pub fn must_not_eliminate_frame_pointers(&self) -> bool {
|
||||
self.opts.debuginfo != DebugInfoLevel::NoDebugInfo
|
||||
|| !self.target.target.options.eliminate_frame_pointer
|
||||
if let Some(x) = self.opts.cg.force_frame_pointers {
|
||||
x
|
||||
} else {
|
||||
!self.target.target.options.eliminate_frame_pointer
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns the symbol name for the registrar function,
|
||||
|
@ -8,7 +8,7 @@
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
//
|
||||
// compile-flags: -C no-prepopulate-passes -C force-frame-pointers
|
||||
// compile-flags: -C no-prepopulate-passes -C force-frame-pointers=y
|
||||
|
||||
#![crate_type="lib"]
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user