diff options
author | Chad Rosier <mcrosier@apple.com> | 2012-05-03 22:38:00 +0000 |
---|---|---|
committer | Chad Rosier <mcrosier@apple.com> | 2012-05-03 22:38:00 +0000 |
commit | dcef562557fcdecc57f5ef3931c77954c11d71f7 (patch) | |
tree | 737e9d891c7b1caa13e1c4053bd0059e36cfc8cb /clang/lib/Driver/Driver.cpp | |
parent | 16d127cb7bb31e0c38b296ac977280353e6e5c14 (diff) | |
download | bcm5719-llvm-dcef562557fcdecc57f5ef3931c77954c11d71f7.tar.gz bcm5719-llvm-dcef562557fcdecc57f5ef3931c77954c11d71f7.zip |
[driver - crash diagnostics] Convert the flags back to an array of strings and use
array_lengthof. Also, append the new filename with correct preprocessed suffix.
Last part of rdar://11285725
llvm-svn: 156117
Diffstat (limited to 'clang/lib/Driver/Driver.cpp')
-rw-r--r-- | clang/lib/Driver/Driver.cpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index e22fc658a8c..3e7a5a23de2 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -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; } |