diff options
Diffstat (limited to 'tools/driver/driver.cpp')
-rw-r--r-- | tools/driver/driver.cpp | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/tools/driver/driver.cpp b/tools/driver/driver.cpp index dbfc293..c61ee72 100644 --- a/tools/driver/driver.cpp +++ b/tools/driver/driver.cpp @@ -178,22 +178,23 @@ void ApplyQAOverride(std::vector<const char*> &Args, const char *OverrideStr, } } -extern int cc1_main(Diagnostic &Diags, - const char **ArgBegin, const char **ArgEnd); +extern int cc1_main(const char **ArgBegin, const char **ArgEnd, + const char *Argv0, void *MainAddr); int main(int argc, const char **argv) { llvm::sys::PrintStackTraceOnErrorSignal(); llvm::PrettyStackTraceProgram X(argc, argv); + // Dispatch to cc1_main if appropriate. + if (argc > 1 && llvm::StringRef(argv[1]) == "-cc1") + return cc1_main(argv+2, argv+argc, argv[0], + (void*) (intptr_t) GetExecutablePath); + llvm::sys::Path Path = GetExecutablePath(argv[0]); DriverDiagnosticPrinter DiagClient(Path.getBasename(), llvm::errs()); Diagnostic Diags(&DiagClient); - // Dispatch to cc1_main if appropriate. - if (argc > 1 && llvm::StringRef(argv[1]) == "-cc1") - return cc1_main(Diags, argv+2, argv+argc); - #ifdef CLANG_IS_PRODUCTION bool IsProduction = true; #else @@ -208,7 +209,9 @@ int main(int argc, const char **argv) { // // Note that we intentionally want to use argv[0] here, to support "clang++" // being a symlink. - std::string ProgName(llvm::sys::Path(argv[0]).getBasename()); + // + // We use *argv instead of argv[0] to work around a bogus g++ warning. + std::string ProgName(llvm::sys::Path(*argv).getBasename()); if (llvm::StringRef(ProgName).endswith("++") || llvm::StringRef(ProgName).rsplit('-').first.endswith("++")) TheDriver.CCCIsCXX = true; |