Driver: Produce crash diagnostics more often on Windows
authorReid Kleckner <reid@kleckner.net>
Mon, 7 Jul 2014 20:23:27 +0000 (20:23 +0000)
committerReid Kleckner <reid@kleckner.net>
Mon, 7 Jul 2014 20:23:27 +0000 (20:23 +0000)
Assertion failures call abort(), which return an exit code of 3 on
Windows.  The 'not' utility has the same check.

Unfortunately, the crash-report.c test requires a shell, so it does not
run for me locally, so I can only test this manually.

There's still more work to be done here: we should generate a batch
script instead of a shell script on Windows.

llvm-svn: 212481

clang/tools/driver/driver.cpp

index 8993a09..9f93837 100644 (file)
@@ -433,8 +433,13 @@ int main(int argc_, const char **argv_) {
 
     // If result status is < 0, then the driver command signalled an error.
     // If result status is 70, then the driver command reported a fatal error.
-    // In these cases, generate additional diagnostic information if possible.
-    if (CommandRes < 0 || CommandRes == 70) {
+    // On Windows, abort will return an exit code of 3.  In these cases,
+    // generate additional diagnostic information if possible.
+    bool DiagnoseCrash = CommandRes < 0 || CommandRes == 70;
+#ifdef LLVM_ON_WIN32
+    DiagnoseCrash |= CommandRes == 3;
+#endif
+    if (DiagnoseCrash) {
       TheDriver.generateCompilationDiagnostics(*C, FailingCommand);
       break;
     }