]> granicus.if.org Git - clang/commitdiff
[MSVC Compat] Don't omit frame pointers if /Oy- is specified before /O2
authorDavid Majnemer <david.majnemer@gmail.com>
Thu, 21 Jan 2016 23:01:11 +0000 (23:01 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Thu, 21 Jan 2016 23:01:11 +0000 (23:01 +0000)
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].

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@258447 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Driver/MSVCToolChain.cpp
test/Driver/cl-options.c

index 68747155b81c47b8514a5447ee96fa3e9d29d953..1d2d20b40727908f277358b7c1f3142ea15380d2 100644 (file)
@@ -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')
index c5985a9c2b2477ef12be73c76d9fbb4617c1935c..6054faaf158ded736ed16ad7ad91cb8064b6dae8 100644 (file)
 // 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