[clang] 5545f76 - Pass the executable name as arg[0] when calling ExecuteAndWait() (#114067)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Oct 30 10:48:06 PDT 2024
Author: Sean Perry
Date: 2024-10-30T13:48:00-04:00
New Revision: 5545f76dc94e76ef6800823bdd1e107ad2264717
URL: https://github.com/llvm/llvm-project/commit/5545f76dc94e76ef6800823bdd1e107ad2264717
DIFF: https://github.com/llvm/llvm-project/commit/5545f76dc94e76ef6800823bdd1e107ad2264717.diff
LOG: Pass the executable name as arg[0] when calling ExecuteAndWait() (#114067)
PR https://github.com/llvm/llvm-project/pull/111976 was enabling the
tests updated in the PR to run on all systems. We found a few didn't run
on z/OS. I tracked the problem down to:
1. the ExecuteToolChainProgram() function wasn't passing the executable
name as the first arg. That was causing exec on z/OS to fail.
2. the temp file needs to be a text file so codepage conversion happens.
Added:
Modified:
clang/lib/Driver/ToolChain.cpp
Removed:
################################################################################
diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp
index 34de0043ca012a..bdf3da0c96adca 100644
--- a/clang/lib/Driver/ToolChain.cpp
+++ b/clang/lib/Driver/ToolChain.cpp
@@ -109,7 +109,8 @@ ToolChain::ToolChain(const Driver &D, const llvm::Triple &T,
llvm::Expected<std::unique_ptr<llvm::MemoryBuffer>>
ToolChain::executeToolChainProgram(StringRef Executable) const {
llvm::SmallString<64> OutputFile;
- llvm::sys::fs::createTemporaryFile("toolchain-program", "txt", OutputFile);
+ llvm::sys::fs::createTemporaryFile("toolchain-program", "txt", OutputFile,
+ llvm::sys::fs::OF_Text);
llvm::FileRemover OutputRemover(OutputFile.c_str());
std::optional<llvm::StringRef> Redirects[] = {
{""},
@@ -128,7 +129,8 @@ ToolChain::executeToolChainProgram(StringRef Executable) const {
*Str + "'");
SecondsToWait = std::max(SecondsToWait, 0); // infinite
}
- if (llvm::sys::ExecuteAndWait(Executable, {}, {}, Redirects, SecondsToWait,
+ if (llvm::sys::ExecuteAndWait(Executable, {Executable}, {}, Redirects,
+ SecondsToWait,
/*MemoryLimit=*/0, &ErrorMessage))
return llvm::createStringError(std::error_code(),
Executable + ": " + ErrorMessage);
More information about the cfe-commits
mailing list