I have updated patch not to generate unused argument warnings.

http://reviews.llvm.org/D6370

Files:
  lib/Driver/Tools.cpp
  test/Driver/frame-pointer-elim.c
Index: lib/Driver/Tools.cpp
===================================================================
--- lib/Driver/Tools.cpp
+++ lib/Driver/Tools.cpp
@@ -2339,18 +2339,20 @@
 
 static bool shouldUseFramePointer(const ArgList &Args,
                                   const llvm::Triple &Triple) {
-  if (Arg *A = Args.getLastArg(options::OPT_fno_omit_frame_pointer,
-                               options::OPT_fomit_frame_pointer))
-    return A->getOption().matches(options::OPT_fno_omit_frame_pointer);
+  if (Arg *A =
+          Args.getLastArg(options::OPT_pg, options::OPT_fno_omit_frame_pointer,
+                          options::OPT_fomit_frame_pointer))
+    return !A->getOption().matches(options::OPT_fomit_frame_pointer);
 
   return shouldUseFramePointerForTarget(Args, Triple);
 }
 
 static bool shouldUseLeafFramePointer(const ArgList &Args,
                                       const llvm::Triple &Triple) {
-  if (Arg *A = Args.getLastArg(options::OPT_mno_omit_leaf_frame_pointer,
+  if (Arg *A = Args.getLastArg(options::OPT_pg,
+                               options::OPT_mno_omit_leaf_frame_pointer,
                                options::OPT_momit_leaf_frame_pointer))
-    return A->getOption().matches(options::OPT_mno_omit_leaf_frame_pointer);
+    return !A->getOption().matches(options::OPT_momit_leaf_frame_pointer);
 
   return shouldUseFramePointerForTarget(Args, Triple);
 }
@@ -4512,9 +4514,10 @@
     SplitDebugInfo(getToolChain(), C, *this, JA, Args, Output, SplitDwarfOut);
 
   if (Arg *A = Args.getLastArg(options::OPT_pg))
-    if (Args.hasArg(options::OPT_fomit_frame_pointer))
+    if (Arg *Conflict = Args.getLastArg(options::OPT_fomit_frame_pointer,
+                                        options::OPT_momit_leaf_frame_pointer))
       D.Diag(diag::err_drv_argument_not_allowed_with)
-        << "-fomit-frame-pointer" << A->getAsString(Args);
+          << Conflict->getAsString(Args) << A->getAsString(Args);
 
   // Claim some arguments which clang supports automatically.
 
Index: test/Driver/frame-pointer-elim.c
===================================================================
--- test/Driver/frame-pointer-elim.c
+++ test/Driver/frame-pointer-elim.c
@@ -26,5 +26,21 @@
 // RUN:   FileCheck --check-prefix=OMIT_LEAF %s
 // OMIT_LEAF: "-momit-leaf-frame-pointer"
 
+// Disable frame-pointer elimination when -pg is used.
+// RUN: %clang -### -target i386-pc-linux-gnu -S -O2 -pg %s 2>&1 | \
+// RUN:   FileCheck --check-prefix=PG %s
+// RUN: %clang -### -target x86-64-pc-linux-gnu -S -O2 -pg %s 2>&1 | \
+// RUN:   FileCheck --check-prefix=PG %s
+// PG-NOT: "-momit-leaf-frame-pointer"
+// PG:     "-mdisable-fp-elim"
+
+// RUN: %clang -### -target i386-pc-linux-gnu -S -fomit-frame-pointer -pg %s 2>&1 | \
+// RUN:   FileCheck --check-prefix=FOMIT-FRAME-POINTER-PG %s
+// FOMIT-FRAME-POINTER-PG: '-fomit-frame-pointer' not allowed with '-pg'
+
+// RUN: %clang -### -target i386-pc-linux-gnu -S -momit-leaf-frame-pointer -pg %s 2>&1 | \
+// RUN:   FileCheck --check-prefix=MOMIT-LEAF-FRAME-POINTER-PG %s
+// MOMIT-LEAF-FRAME-POINTER-PG: '-momit-leaf-frame-pointer' not allowed with '-pg'
+
 void f0() {}
 void f1() { f0(); }
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to