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