summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2012-09-06 21:07:57 +0000
committerBill Wendling <isanbard@gmail.com>2012-09-06 21:07:57 +0000
commit0b95a9949ba6d9823be202c384c60ab9ef9404d8 (patch)
tree633ef082574f5b35dd5443d4e4fed30c5e5468a6 /tools
parent6b96c3f71fce6b0a7c380dfc3b7ebf22c40e804b (diff)
downloadllvm-0b95a9949ba6d9823be202c384c60ab9ef9404d8.tar.gz
llvm-0b95a9949ba6d9823be202c384c60ab9ef9404d8.tar.bz2
llvm-0b95a9949ba6d9823be202c384c60ab9ef9404d8.tar.xz
Explicitly erase the file from disk if something bad happened. <rdar://problem/12184899>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@163349 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools')
-rw-r--r--tools/lto/LTOCodeGenerator.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/tools/lto/LTOCodeGenerator.cpp b/tools/lto/LTOCodeGenerator.cpp
index b80bc34a23..f8b07b2e2a 100644
--- a/tools/lto/LTOCodeGenerator.cpp
+++ b/tools/lto/LTOCodeGenerator.cpp
@@ -163,13 +163,16 @@ bool LTOCodeGenerator::compile_to_file(const char** name, std::string& errMsg) {
// generate object file
bool genResult = false;
tool_output_file objFile(uniqueObjPath.c_str(), errMsg);
- if (!errMsg.empty())
+ if (!errMsg.empty()) {
+ uniqueObjPath.eraseFromDisk();
return true;
+ }
genResult = this->generateObjectFile(objFile.os(), errMsg);
objFile.os().close();
if (objFile.os().has_error()) {
objFile.os().clear_error();
+ uniqueObjPath.eraseFromDisk();
return true;
}
@@ -196,6 +199,7 @@ const void* LTOCodeGenerator::compile(size_t* length, std::string& errMsg) {
OwningPtr<MemoryBuffer> BuffPtr;
if (error_code ec = MemoryBuffer::getFile(name, BuffPtr, -1, false)) {
errMsg = ec.message();
+ sys::Path(_nativeObjectPath).eraseFromDisk();
return NULL;
}
_nativeObjectFile = BuffPtr.take();