diff options
author | Daniel Dunbar <daniel@zuster.org> | 2010-07-14 18:46:27 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2010-07-14 18:46:27 +0000 |
commit | 9765b9817da65c32a6447e07af56e9510e33e75c (patch) | |
tree | 752b2d6b601f7119945bc20c9911a72072855ba2 | |
parent | 9c3ed5f4d0f67e2a62100e175ad09c50efd0214e (diff) | |
download | bcm5719-llvm-9765b9817da65c32a6447e07af56e9510e33e75c.tar.gz bcm5719-llvm-9765b9817da65c32a6447e07af56e9510e33e75c.zip |
Driver: When re'execing clang, use path to the main executable instead of
looking up Clang in the normal search paths (which may end up finding the wrong
clang).
llvm-svn: 108346
-rw-r--r-- | clang/include/clang/Driver/Driver.h | 8 | ||||
-rw-r--r-- | clang/lib/Driver/Driver.cpp | 5 | ||||
-rw-r--r-- | clang/lib/Driver/Tools.cpp | 10 |
3 files changed, 17 insertions, 6 deletions
diff --git a/clang/include/clang/Driver/Driver.h b/clang/include/clang/Driver/Driver.h index 153981f842d..bb578b516ce 100644 --- a/clang/include/clang/Driver/Driver.h +++ b/clang/include/clang/Driver/Driver.h @@ -62,6 +62,9 @@ public: /// command line. std::string Dir; + /// The original path to the clang executable. + std::string ClangExecutable; + /// The path to the compiler resource directory. std::string ResourceDir; @@ -163,6 +166,11 @@ public: const std::string &getTitle() { return DriverTitle; } void setTitle(std::string Value) { DriverTitle = Value; } + /// \brief Get the path to the main clang executable. + std::string getClangProgramPath() const { + return ClangExecutable; + } + /// @} /// @name Primary Functionality /// @{ diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 5da7908434d..2fc0a5354d8 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -75,6 +75,11 @@ Driver::Driver(llvm::StringRef _Name, llvm::StringRef _Dir, P.appendComponent("clang"); P.appendComponent(CLANG_VERSION_STRING); ResourceDir = P.str(); + + // Save the original clang executable path. + P = Dir; + P.appendComponent(Name); + ClangExecutable = P.str(); } Driver::~Driver() { diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 14744998f16..f423d4e3b91 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -1489,8 +1489,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, Args.AddAllArgs(CmdArgs, options::OPT_undef); - const char *Exec = - Args.MakeArgString(getToolChain().GetProgramPath("clang")); + std::string Exec = getToolChain().getDriver().getClangProgramPath(); // Optionally embed the -cc1 level arguments into the debug info, for build // analysis. @@ -1510,7 +1509,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back(Args.MakeArgString(Flags.str())); } - Dest.addCommand(new Command(JA, *this, Exec, CmdArgs)); + Dest.addCommand(new Command(JA, *this, Exec.c_str(), CmdArgs)); // Explicitly warn that these options are unsupported, even though // we are allowing compilation to continue. @@ -1589,9 +1588,8 @@ void ClangAs::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back(Input.getFilename()); } - const char *Exec = - Args.MakeArgString(getToolChain().GetProgramPath("clang")); - Dest.addCommand(new Command(JA, *this, Exec, CmdArgs)); + std::string Exec = getToolChain().getDriver().getClangProgramPath(); + Dest.addCommand(new Command(JA, *this, Exec.c_str(), CmdArgs)); } void gcc::Common::ConstructJob(Compilation &C, const JobAction &JA, |