diff --git a/lib/Support/GraphWriter.cpp b/lib/Support/GraphWriter.cpp index e68ee434dd5..3910b12da89 100644 --- a/lib/Support/GraphWriter.cpp +++ b/lib/Support/GraphWriter.cpp @@ -105,9 +105,11 @@ struct GraphSession { SmallVector parts; Names.split(parts, "|"); for (auto Name : parts) { - ProgramPath = sys::FindProgramByName(Name); - if (!ProgramPath.empty()) + auto P = sys::findProgramByName(Name); + if (P) { + ProgramPath = *P; return true; + } Log << " Tried '" << Name << "'\n"; } return false; diff --git a/tools/bugpoint/OptimizerDriver.cpp b/tools/bugpoint/OptimizerDriver.cpp index 3854aa1e5bf..752fc8950e5 100644 --- a/tools/bugpoint/OptimizerDriver.cpp +++ b/tools/bugpoint/OptimizerDriver.cpp @@ -159,12 +159,33 @@ bool BugDriver::runPasses(Module *Program, return 1; } - std::string tool = OptCmd.empty()? sys::FindProgramByName("opt") : OptCmd; + std::string tool = OptCmd; + if (OptCmd.empty()) { + auto Path = sys::findProgramByName("opt"); + if (!Path) + errs() << Path.getError().message() << "\n"; + else + tool = *Path; + } if (tool.empty()) { errs() << "Cannot find `opt' in PATH!\n"; return 1; } + std::string Prog; + if (UseValgrind) { + auto Path = sys::findProgramByName("valgrind"); + if (!Path) + errs() << Path.getError().message() << "\n"; + else + Prog = *Path; + } else + Prog = tool; + if (Prog.empty()) { + errs() << "Cannot find `valgrind' in PATH!\n"; + return 1; + } + // Ok, everything that could go wrong before running opt is done. InFile.keep(); @@ -204,12 +225,6 @@ bool BugDriver::runPasses(Module *Program, errs() << "\n"; ); - std::string Prog; - if (UseValgrind) - Prog = sys::FindProgramByName("valgrind"); - else - Prog = tool; - // Redirect stdout and stderr to nowhere if SilencePasses is given StringRef Nowhere; const StringRef *Redirects[3] = {nullptr, &Nowhere, &Nowhere}; diff --git a/tools/bugpoint/ToolRunner.cpp b/tools/bugpoint/ToolRunner.cpp index bdbcffbe926..51091e297d7 100644 --- a/tools/bugpoint/ToolRunner.cpp +++ b/tools/bugpoint/ToolRunner.cpp @@ -427,13 +427,14 @@ static void lexCommand(std::string &Message, const std::string &CommandLine, pos = CommandLine.find_first_of(delimiters, lastPos); } - CmdPath = sys::FindProgramByName(Command); - if (CmdPath.empty()) { + auto Path = sys::findProgramByName(Command); + if (!Path) { Message = std::string("Cannot find '") + Command + - "' in PATH!\n"; + "' in PATH: " + Path.getError().message() + "\n"; return; } + CmdPath = *Path; Message = "Found command in: " + CmdPath + "\n"; } @@ -907,16 +908,24 @@ int GCC::MakeSharedObject(const std::string &InputFile, FileType fileType, GCC *GCC::create(std::string &Message, const std::string &GCCBinary, const std::vector *Args) { - std::string GCCPath = sys::FindProgramByName(GCCBinary); - if (GCCPath.empty()) { - Message = "Cannot find `"+ GCCBinary +"' in PATH!\n"; + auto GCCPath = sys::findProgramByName(GCCBinary); + if (!GCCPath) { + Message = "Cannot find `" + GCCBinary + "' in PATH: " + + GCCPath.getError().message() + "\n"; return nullptr; } std::string RemoteClientPath; - if (!RemoteClient.empty()) - RemoteClientPath = sys::FindProgramByName(RemoteClient); + if (!RemoteClient.empty()) { + auto Path = sys::findProgramByName(RemoteClient); + if (!Path) { + Message = "Cannot find `" + RemoteClient + "' in PATH: " + + Path.getError().message() + "\n"; + return nullptr; + } + RemoteClientPath = *Path; + } - Message = "Found gcc: " + GCCPath + "\n"; - return new GCC(GCCPath, RemoteClientPath, Args); + Message = "Found gcc: " + *GCCPath + "\n"; + return new GCC(*GCCPath, RemoteClientPath, Args); } diff --git a/utils/not/not.cpp b/utils/not/not.cpp index a5c7183bd2c..2adeded51f0 100644 --- a/utils/not/not.cpp +++ b/utils/not/not.cpp @@ -27,10 +27,15 @@ int main(int argc, const char **argv) { if (argc == 0) return 1; - std::string Program = sys::FindProgramByName(argv[0]); + auto Program = sys::findProgramByName(argv[0]); + if (!Program) { + errs() << "Error: Unable to find `" << argv[0] + << "' in PATH: " << Program.getError().message() << "\n"; + return 1; + } std::string ErrMsg; - int Result = sys::ExecuteAndWait(Program, argv, nullptr, nullptr, 0, 0, + int Result = sys::ExecuteAndWait(*Program, argv, nullptr, nullptr, 0, 0, &ErrMsg); #ifdef _WIN32 // Handle abort() in msvcrt -- It has exit code as 3. abort(), aka