[cfe-commits] r105966 - in /cfe/trunk: lib/Driver/Driver.cpp test/Driver/Wp-args.c

Daniel Dunbar daniel at zuster.org
Mon Jun 14 14:37:09 PDT 2010


Author: ddunbar
Date: Mon Jun 14 16:37:09 2010
New Revision: 105966

URL: http://llvm.org/viewvc/llvm-project?rev=105966&view=rev
Log:
Driver: Fix PR4062 by dissecting one particular -Wp, form.

Added:
    cfe/trunk/test/Driver/Wp-args.c
Modified:
    cfe/trunk/lib/Driver/Driver.cpp

Modified: cfe/trunk/lib/Driver/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=105966&r1=105965&r2=105966&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/Driver.cpp (original)
+++ cfe/trunk/lib/Driver/Driver.cpp Mon Jun 14 16:37:09 2010
@@ -120,12 +120,12 @@
     // Unfortunately, we have to parse some forwarding options (-Xassembler,
     // -Xlinker, -Xpreprocessor) because we either integrate their functionality
     // (assembler and preprocessor), or bypass a previous driver ('collect2').
-    if (A->getOption().matches(options::OPT_Xlinker) &&
-        A->getValue(Args) == llvm::StringRef("--no-demangle")) {
-      DAL->AddFlagArg(A, Opts->getOption(options::OPT_Z_Xlinker__no_demangle));
-      continue;
-    } else if (A->getOption().matches(options::OPT_Wl_COMMA) &&
-               A->containsValue("--no-demangle")) {
+
+    // Rewrite linker options, to replace --no-demangle with a custom internal
+    // option.
+    if ((A->getOption().matches(options::OPT_Wl_COMMA) ||
+         A->getOption().matches(options::OPT_Xlinker)) &&
+        A->containsValue("--no-demangle")) {
       // Add the rewritten no-demangle argument.
       DAL->AddFlagArg(A, Opts->getOption(options::OPT_Z_Xlinker__no_demangle));
 
@@ -138,6 +138,19 @@
       continue;
     }
 
+    // Rewrite preprocessor options, to replace -Wp,-MD,FOO which is used by
+    // some build systems. We don't try to be complete here because we don't
+    // care to encourage this usage model.
+    if (A->getOption().matches(options::OPT_Wp_COMMA) &&
+        A->getNumValues() == 2 &&
+        A->getValue(Args, 0) == llvm::StringRef("-MD")) {
+      // Rewrite to -MD along with -MF.
+      DAL->AddFlagArg(A, Opts->getOption(options::OPT_MD));
+      DAL->AddSeparateArg(A, Opts->getOption(options::OPT_MF),
+                          A->getValue(Args, 1));
+      continue;
+    }
+
     DAL->append(*it);
   }
 

Added: cfe/trunk/test/Driver/Wp-args.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Wp-args.c?rev=105966&view=auto
==============================================================================
--- cfe/trunk/test/Driver/Wp-args.c (added)
+++ cfe/trunk/test/Driver/Wp-args.c Mon Jun 14 16:37:09 2010
@@ -0,0 +1,13 @@
+// Check that we extract -MD from '-Wp,-MD,FOO', which is used by a number of
+// major projects (e.g., FireFox and the Linux Kernel).
+
+// RUN: %clang --ccc-host-triple i386-pc-linux-gnu -### \
+// RUN:   -Wp,-MD,FOO.d -fsyntax-only %s 2> %t
+// RUN: FileCheck < %t %s
+//
+// CHECK: "-cc1"
+// CHECK-NOT: -MD
+// CHECK: "-dependency-file" "FOO.d"
+// CHECK: "-MT"
+//
+// PR4062





More information about the cfe-commits mailing list