[cfe-commits] r160743 - in /cfe/trunk: lib/Driver/Driver.cpp test/Driver/crash-report.c

Chad Rosier mcrosier at apple.com
Wed Jul 25 10:52:16 PDT 2012


Author: mcrosier
Date: Wed Jul 25 12:52:16 2012
New Revision: 160743

URL: http://llvm.org/viewvc/llvm-project?rev=160743&view=rev
Log:
[driver crash diagnostics] A few enhancements:
 -Strip -iquote and -M options.
 -Quote -D options to avoid problems with command line macros that include
  parens.
rdar://11949066

Modified:
    cfe/trunk/lib/Driver/Driver.cpp
    cfe/trunk/test/Driver/crash-report.c

Modified: cfe/trunk/lib/Driver/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=160743&r1=160742&r2=160743&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/Driver.cpp (original)
+++ cfe/trunk/lib/Driver/Driver.cpp Wed Jul 25 12:52:16 2012
@@ -504,8 +504,18 @@
         // Strip away options not necessary to reproduce the crash.
         // FIXME: This doesn't work with quotes (e.g., -D "foo bar").
         SmallVector<std::string, 16> Flag;
+        Flag.push_back("-D ");
         Flag.push_back("-F");
         Flag.push_back("-I ");
+        Flag.push_back("-M ");
+        Flag.push_back("-MD ");
+        Flag.push_back("-MF ");
+        Flag.push_back("-MG ");
+        Flag.push_back("-MM ");
+        Flag.push_back("-MMD ");
+        Flag.push_back("-MP ");
+        Flag.push_back("-MQ ");
+        Flag.push_back("-MT ");
         Flag.push_back("-o ");
         Flag.push_back("-coverage-file ");
         Flag.push_back("-dependency-file ");
@@ -514,6 +524,7 @@
         Flag.push_back("-include ");
         Flag.push_back("-include-pch ");
         Flag.push_back("-isysroot ");
+        Flag.push_back("-iquote ");
         Flag.push_back("-resource-dir ");
         Flag.push_back("-serialize-diagnostic-file ");
         for (unsigned i = 0, e = Flag.size(); i < e; ++i) {
@@ -524,7 +535,14 @@
 
             E = Cmd.find(" ", I + Flag[i].length());
             if (E == std::string::npos) break;
-            Cmd.erase(I, E - I + 1);
+            // The -D option is not removed.  Instead, the argument is quoted.
+            if (Flag[i] != "-D ") {
+              Cmd.erase(I, E - I + 1);
+            } else {
+              Cmd.insert(I+3, "\"");
+              Cmd.insert(++E, "\"");
+              I = E;
+            }
           } while(1);
         }
         // Append the new filename with correct preprocessed suffix.

Modified: cfe/trunk/test/Driver/crash-report.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/crash-report.c?rev=160743&r1=160742&r2=160743&view=diff
==============================================================================
--- cfe/trunk/test/Driver/crash-report.c (original)
+++ cfe/trunk/test/Driver/crash-report.c Wed Jul 25 12:52:16 2012
@@ -1,6 +1,7 @@
 // RUN: rm -rf %t
 // RUN: mkdir %t
-// RUN: env TMPDIR=%t TEMP=%t TMP=%t %clang -fsyntax-only %s -DFOO=BAR 2>&1 | FileCheck %s
+// RUN: env TMPDIR=%t TEMP=%t TMP=%t %clang -fsyntax-only %s \
+// RUN:  -F/tmp/ -I /tmp/ -iquote /tmp/ -DFOO=BAR 2>&1 | FileCheck %s
 // RUN: cat %t/crash-report-*.c | FileCheck --check-prefix=CHECKSRC %s
 // RUN: cat %t/crash-report-*.sh | FileCheck --check-prefix=CHECKSH %s
 // REQUIRES: crash-recovery
@@ -10,4 +11,7 @@
 // CHECK-NEXT: note: diagnostic msg: {{.*}}.c
 FOO
 // CHECKSRC: FOO
-// CHECKSH: -D FOO=BAR
+// CHECKSH: -D "FOO=BAR"
+// CHECKSH-NOT: -F/tmp/
+// CHECKSH-NOT: -I /tmp/
+// CHECKSH-NOT: -iquote /tmp/





More information about the cfe-commits mailing list