diff options
author | Joseph Huber <jhuber6@vols.utk.edu> | 2023-02-06 12:26:45 -0600 |
---|---|---|
committer | Tom Stellard <tstellar@redhat.com> | 2023-02-07 17:12:10 -0800 |
commit | aa2bbfaee2d5b352f7ab1a990c1e40535c6fb51b (patch) | |
tree | 49b4dc94cc00e9f7d36d0d0ed633c89644a96539 | |
parent | c4392bcc1d5d65720f00553b3ea17f81f9832527 (diff) | |
download | llvm-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.cpp | 8 |
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())); |