]> granicus.if.org Git - clang/commitdiff
[driver - crash diagnostics] Convert the flags back to an array of strings and use
authorChad Rosier <mcrosier@apple.com>
Thu, 3 May 2012 22:38:00 +0000 (22:38 +0000)
committerChad Rosier <mcrosier@apple.com>
Thu, 3 May 2012 22:38:00 +0000 (22:38 +0000)
array_lengthof.  Also, append the new filename with correct preprocessed suffix.
Last part of rdar://11285725

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@156117 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Driver/Driver.cpp

index e22fc658a8c26ce3b7448bbca486d0ea19b7790d..3e7a5a23de2b1c92284c4041758724f713e3063a 100644 (file)
@@ -521,7 +521,19 @@ void Driver::generateCompilationDiagnostics(Compilation &C,
             Cmd.erase(I, E - I + 1);
           } while(1);
         }
-        // FIXME: Append the new filename with correct preprocessed suffix.
+        // Append the new filename with correct preprocessed suffix.
+        size_t I, E;
+        I = Cmd.find("-main-file-name ");
+        assert (I != std::string::npos && "Expected to find -main-file-name");
+        I += 16;
+        E = Cmd.find(" ", I);
+        assert (E != std::string::npos && "-main-file-name missing argument?");
+        std::string OldFilename = Cmd.substr(I, E - I);
+        std::string NewFilename = llvm::sys::path::filename(*it).str();
+        I = Cmd.rfind(OldFilename);
+        E = I + OldFilename.length() - 1;
+        I = Cmd.rfind(" ", I);
+        Cmd.replace(I + 1, E - I, NewFilename);
         ScriptOS << Cmd;
         Diag(clang::diag::note_drv_command_failed_diag_msg) << Script;
       }