summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2016-01-21 23:01:11 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2016-01-21 23:01:11 +0000
commit259d71a464212756009dfd2418005c6eb5840c94 (patch)
tree48d373cb62e962277acc167cd4d97b550eb357f5
parent9beec21fcf334849b063d838160dbd5512eb411c (diff)
downloadbcm5719-llvm-259d71a464212756009dfd2418005c6eb5840c94.tar.gz
bcm5719-llvm-259d71a464212756009dfd2418005c6eb5840c94.zip
[MSVC Compat] Don't omit frame pointers if /Oy- is specified before /O2
Microsoft's documentation states that specifying /Oy- after the /O[12x] options disables frame-pointer omission. What it does *not* state is that it also disables frame-pointer omission if /Oy- is specified before /O[12x]. llvm-svn: 258447
-rw-r--r--clang/lib/Driver/MSVCToolChain.cpp3
-rw-r--r--clang/test/Driver/cl-options.c4
2 files changed, 6 insertions, 1 deletions
diff --git a/clang/lib/Driver/MSVCToolChain.cpp b/clang/lib/Driver/MSVCToolChain.cpp
index 68747155b81..1d2d20b4072 100644
--- a/clang/lib/Driver/MSVCToolChain.cpp
+++ b/clang/lib/Driver/MSVCToolChain.cpp
@@ -659,7 +659,8 @@ static void TranslateOptArg(Arg *A, llvm::opt::DerivedArgList &DAL,
DAL.AddFlagArg(A, Opts.getOption(options::OPT_fbuiltin));
DAL.AddJoinedArg(A, Opts.getOption(options::OPT_O), "2");
}
- if (SupportsForcingFramePointer)
+ if (SupportsForcingFramePointer &&
+ !DAL.hasArgNoClaim(options::OPT_fno_omit_frame_pointer))
DAL.AddFlagArg(A,
Opts.getOption(options::OPT_fomit_frame_pointer));
if (OptChar == '1' || OptChar == '2')
diff --git a/clang/test/Driver/cl-options.c b/clang/test/Driver/cl-options.c
index c5985a9c2b2..6054faaf158 100644
--- a/clang/test/Driver/cl-options.c
+++ b/clang/test/Driver/cl-options.c
@@ -123,6 +123,10 @@
// PR24003: -momit-leaf-frame-pointer
// PR24003: -Os
+// RUN: %clang_cl --target=i686-pc-win32 /Oy- /O2 -### -- %s 2>&1 | FileCheck -check-prefix=Oy_2 %s
+// Oy_2: -momit-leaf-frame-pointer
+// Oy_2: -O2
+
// RUN: %clang_cl /Zs /Oy -- %s 2>&1
// RUN: %clang_cl --target=i686-pc-win32 /Oy- -### -- %s 2>&1 | FileCheck -check-prefix=Oy_ %s
OpenPOWER on IntegriCloud