r309984 - Use "foo-12345.o" instead of "foo.o-12345" as temporary file name.
Nico Weber via cfe-commits
cfe-commits at lists.llvm.org
Thu Aug 3 14:06:36 PDT 2017
Author: nico
Date: Thu Aug 3 14:06:36 2017
New Revision: 309984
URL: http://llvm.org/viewvc/llvm-project?rev=309984&view=rev
Log:
Use "foo-12345.o" instead of "foo.o-12345" as temporary file name.
This helps some tools that do things based on the output's extension.
For example, we got reports from users on Windows that have a tool that scan a
build output dir (but skip .obj files). The tool would keep the "foo.obj-12345"
file open, and then when clang tried to rename the temp file to the final
output filename, that would fail. By making the tempfile end in ".obj", tools
like this will now skip the temp files as well.
https://reviews.llvm.org/D36238
Modified:
cfe/trunk/lib/Frontend/CompilerInstance.cpp
Modified: cfe/trunk/lib/Frontend/CompilerInstance.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInstance.cpp?rev=309984&r1=309983&r2=309984&view=diff
==============================================================================
--- cfe/trunk/lib/Frontend/CompilerInstance.cpp (original)
+++ cfe/trunk/lib/Frontend/CompilerInstance.cpp Thu Aug 3 14:06:36 2017
@@ -759,9 +759,13 @@ std::unique_ptr<llvm::raw_pwrite_stream>
if (UseTemporary) {
// Create a temporary file.
- SmallString<128> TempPath;
- TempPath = OutFile;
+ // Insert -%%%%%%%% before the extension (if any), so that tools doing
+ // things based on the file extension do the right thing.
+ StringRef OutputExtension = llvm::sys::path::extension(OutFile);
+ SmallString<128> TempPath =
+ StringRef(OutFile).drop_back(OutputExtension.size());
TempPath += "-%%%%%%%%";
+ TempPath += OutputExtension;
int fd;
std::error_code EC =
llvm::sys::fs::createUniqueFile(TempPath, fd, TempPath);
More information about the cfe-commits
mailing list