diff options
-rw-r--r-- | lib/Driver/Driver.cpp | 20 | ||||
-rw-r--r-- | test/Driver/crash-report.c | 8 |
2 files changed, 25 insertions, 3 deletions
diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp index 7f6fcb1a5e..c7819b1fce 100644 --- a/lib/Driver/Driver.cpp +++ b/lib/Driver/Driver.cpp @@ -504,8 +504,18 @@ void Driver::generateCompilationDiagnostics(Compilation &C, // 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 @@ void Driver::generateCompilationDiagnostics(Compilation &C, 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 @@ void Driver::generateCompilationDiagnostics(Compilation &C, 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. diff --git a/test/Driver/crash-report.c b/test/Driver/crash-report.c index 9476adadac..fd45f48ccd 100644 --- a/test/Driver/crash-report.c +++ b/test/Driver/crash-report.c @@ -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/ |