From 11656f204aa5fd972564e76641c00ca058ba8c0d Mon Sep 17 00:00:00 2001 From: Joseph Huber Date: Wed, 25 Jan 2023 16:20:16 -0600 Subject: [PATCH] [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. Fixes https://github.com/llvm/llvm-project/issues/60301 --- clang/lib/Driver/ToolChains/Cuda.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/clang/lib/Driver/ToolChains/Cuda.cpp b/clang/lib/Driver/ToolChains/Cuda.cpp index 484c8c0..9a231c0 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())); -- 2.7.4