Author: Joseph Huber Date: 2026-05-26T06:58:50-05:00 New Revision: 10c0de887256f33427353a1f8988842b98a340c9
URL: https://github.com/llvm/llvm-project/commit/10c0de887256f33427353a1f8988842b98a340c9 DIFF: https://github.com/llvm/llvm-project/commit/10c0de887256f33427353a1f8988842b98a340c9.diff LOG: [LinkerWrapper] Fix temps being dumped to CWD instead of output path (#198679) Summary: Offloading save temps is a complex dance where we have clang, linker-wrapper, and lld all making their own temp files. The ones in the linker wrapper were not respecting the output directory because we stripped everything with filename. Just get rid of this so it uses the output file's directory properly in this mode. Added: Modified: clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp Removed: ################################################################################ diff --git a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp index 5abf1d387922a..c648bb38edf71 100644 --- a/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp +++ b/clang/tools/clang-linker-wrapper/ClangLinkerWrapper.cpp @@ -228,8 +228,8 @@ Expected<StringRef> createOutputFile(const Twine &Prefix, StringRef Extension) { if (SaveTemps) { (PrefixStr + "." + Extension).toNullTerminatedStringRef(OutputFile); } else { - if (std::error_code EC = - sys::fs::createTemporaryFile(PrefixStr, Extension, OutputFile)) + if (std::error_code EC = sys::fs::createTemporaryFile( + sys::path::filename(PrefixStr), Extension, OutputFile)) return createFileError(OutputFile, EC); } @@ -410,8 +410,7 @@ fatbinary(ArrayRef<std::pair<StringRef, StringRef>> InputFiles, Args.getLastArgValue(OPT_host_triple_EQ, sys::getDefaultTargetTriple())); // Create a new file to write the linked device image to. - auto TempFileOrErr = - createOutputFile(sys::path::filename(ExecutableName), "fatbin"); + auto TempFileOrErr = createOutputFile(ExecutableName, "fatbin"); if (!TempFileOrErr) return TempFileOrErr.takeError(); @@ -455,8 +454,7 @@ fatbinary(ArrayRef<std::tuple<StringRef, StringRef, StringRef>> InputFiles, return OffloadBundlerPath.takeError(); // Create a new file to write the linked device image to. - auto TempFileOrErr = - createOutputFile(sys::path::filename(ExecutableName), "hipfb"); + auto TempFileOrErr = createOutputFile(ExecutableName, "hipfb"); if (!TempFileOrErr) return TempFileOrErr.takeError(); @@ -518,8 +516,7 @@ Expected<StringRef> clang(ArrayRef<StringRef> InputFiles, const ArgList &Args, // input filename already has the device and architecture. std::string OutputFileBase = "." + Triple.getArchName().str() + "." + Arch.str(); - auto TempFileOrErr = createOutputFile( - sys::path::filename(ExecutableName) + OutputFileBase, "img"); + auto TempFileOrErr = createOutputFile(ExecutableName + OutputFileBase, "img"); if (!TempFileOrErr) return TempFileOrErr.takeError(); @@ -701,10 +698,8 @@ Expected<StringRef> compileModule(Module &M, OffloadKind Kind) { M.setDataLayout(TM->createDataLayout()); int FD = -1; - auto TempFileOrErr = - createOutputFile(sys::path::filename(ExecutableName) + "." + - getOffloadKindName(Kind) + ".image.wrapper", - "o"); + auto TempFileOrErr = createOutputFile( + ExecutableName + "." + getOffloadKindName(Kind) + ".image.wrapper", "o"); if (!TempFileOrErr) return TempFileOrErr.takeError(); if (std::error_code EC = sys::fs::openFileForWrite(*TempFileOrErr, FD)) @@ -775,10 +770,9 @@ wrapDeviceImages(ArrayRef<std::unique_ptr<MemoryBuffer>> Buffers, errs() << M; if (Args.hasArg(OPT_save_temps)) { int FD = -1; - auto TempFileOrErr = - createOutputFile(sys::path::filename(ExecutableName) + "." + - getOffloadKindName(Kind) + ".image.wrapper", - "bc"); + auto TempFileOrErr = createOutputFile( + ExecutableName + "." + getOffloadKindName(Kind) + ".image.wrapper", + "bc"); if (!TempFileOrErr) return TempFileOrErr.takeError(); if (std::error_code EC = sys::fs::openFileForWrite(*TempFileOrErr, FD)) _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
