summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Huber <jhuber6@vols.utk.edu>2023-02-06 12:26:45 -0600
committerTom Stellard <tstellar@redhat.com>2023-02-07 17:12:10 -0800
commitaa2bbfaee2d5b352f7ab1a990c1e40535c6fb51b (patch)
tree49b4dc94cc00e9f7d36d0d0ed633c89644a96539
parentc4392bcc1d5d65720f00553b3ea17f81f9832527 (diff)
downloadllvm-aa2bbfaee2d5b352f7ab1a990c1e40535c6fb51b.tar.gz
[CUDA] Fix output from ptxas being removes as a temporary file
Summary: The logic here is to add the `.cubin` temporary file if we had to create a new filename to handle it. Unfortuantely the logic was wrong because we compare `const char *` values here. This logic seems to have been wrong for some time, but was never noticed since we never used the relocatable output.
-rw-r--r--clang/lib/Driver/ToolChains/Cuda.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/clang/lib/Driver/ToolChains/Cuda.cpp b/clang/lib/Driver/ToolChains/Cuda.cpp
index 484c8c070264..9a231c06a074 100644
--- a/clang/lib/Driver/ToolChains/Cuda.cpp
+++ b/clang/lib/Driver/ToolChains/Cuda.cpp
@@ -443,7 +443,7 @@ void NVPTX::Assembler::ConstructJob(Compilation &C, const JobAction &JA,
CmdArgs.push_back("--gpu-name");
CmdArgs.push_back(Args.MakeArgString(CudaArchToString(gpu_arch)));
CmdArgs.push_back("--output-file");
- const char *OutputFileName = Args.MakeArgString(TC.getInputFilename(Output));
+ std::string OutputFileName = TC.getInputFilename(Output);
// If we are invoking `nvlink` internally we need to output a `.cubin` file.
// Checking if the output is a temporary is the cleanest way to determine
@@ -455,12 +455,12 @@ void NVPTX::Assembler::ConstructJob(Compilation &C, const JobAction &JA,
C.getTempFiles().end()) {
SmallString<256> Filename(Output.getFilename());
llvm::sys::path::replace_extension(Filename, "cubin");
- OutputFileName = Args.MakeArgString(Filename);
+ OutputFileName = Filename.str();
}
if (Output.isFilename() && OutputFileName != Output.getFilename())
- C.addTempFile(OutputFileName);
+ C.addTempFile(Args.MakeArgString(OutputFileName));
- CmdArgs.push_back(OutputFileName);
+ CmdArgs.push_back(Args.MakeArgString(OutputFileName));
for (const auto &II : Inputs)
CmdArgs.push_back(Args.MakeArgString(II.getFilename()));