aboutsummaryrefslogtreecommitdiff
path: root/flang/lib/Frontend/CompilerInvocation.cpp
diff options
context:
space:
mode:
authorDaniel Paoliello <danpao@microsoft.com>2025-07-07 09:15:47 -0700
committerGitHub <noreply@github.com>2025-07-07 09:15:47 -0700
commit71ffa2a4d3c220c97fbffa6078a446cc17bbaada (patch)
treea18d0e0114634c4865a0a110be213c8843077fd8 /flang/lib/Frontend/CompilerInvocation.cpp
parentc34508023b722daf66387c24ccfe8d9d1b1dce8d (diff)
downloadllvm-71ffa2a4d3c220c97fbffa6078a446cc17bbaada.zip
llvm-71ffa2a4d3c220c97fbffa6078a446cc17bbaada.tar.gz
llvm-71ffa2a4d3c220c97fbffa6078a446cc17bbaada.tar.bz2
[flang] Correctly handle -mframe-pointer=reserved (#146937)
Fixes `#146802` #146582 started using the `Reserved` Frame Pointer kind for Arm64 Windows, but this revealed a bug in Flang where it copied the `-mframe-pointer=reserved` flag from Clang, but didn't correctly handle it in its own command line parser and subsequent compilation pipeline. This change adds support for `-mframe-pointer=reserved` and adds a test to make sure that functions are correctly marked when the flag is set.
Diffstat (limited to 'flang/lib/Frontend/CompilerInvocation.cpp')
-rw-r--r--flang/lib/Frontend/CompilerInvocation.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/flang/lib/Frontend/CompilerInvocation.cpp b/flang/lib/Frontend/CompilerInvocation.cpp
index 8e4c210..e5c6b1d 100644
--- a/flang/lib/Frontend/CompilerInvocation.cpp
+++ b/flang/lib/Frontend/CompilerInvocation.cpp
@@ -291,13 +291,14 @@ static void parseCodeGenArgs(Fortran::frontend::CodeGenOptions &opts,
opts.AliasAnalysis = opts.OptimizationLevel > 0;
- // -mframe-pointer=none/non-leaf/all option.
+ // -mframe-pointer=none/non-leaf/reserved/all option.
if (const llvm::opt::Arg *a =
args.getLastArg(clang::driver::options::OPT_mframe_pointer_EQ)) {
std::optional<llvm::FramePointerKind> val =
llvm::StringSwitch<std::optional<llvm::FramePointerKind>>(a->getValue())
.Case("none", llvm::FramePointerKind::None)
.Case("non-leaf", llvm::FramePointerKind::NonLeaf)
+ .Case("reserved", llvm::FramePointerKind::Reserved)
.Case("all", llvm::FramePointerKind::All)
.Default(std::nullopt);