forked from OSchip/llvm-project
Convert another use of createUniqueFile to TempFile::create.
llvm-svn: 318427
This commit is contained in:
parent
c430f08c80
commit
8010bf0a92
|
@ -32,6 +32,11 @@ namespace llvm {
|
|||
Triple TargetTriple;
|
||||
}
|
||||
|
||||
DiscardTemp::~DiscardTemp() {
|
||||
if (Error E = File.discard())
|
||||
errs() << "Failed to delete temp file " << toString(std::move(E)) << '\n';
|
||||
}
|
||||
|
||||
// Anonymous namespace to define command line options for debugging.
|
||||
//
|
||||
namespace {
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
|
||||
#include "llvm/IR/ValueMap.h"
|
||||
#include "llvm/Support/Error.h"
|
||||
#include "llvm/Support/FileSystem.h"
|
||||
#include "llvm/Transforms/Utils/ValueMapper.h"
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
@ -278,6 +279,11 @@ private:
|
|||
Error initializeExecutionEnvironment();
|
||||
};
|
||||
|
||||
struct DiscardTemp {
|
||||
sys::fs::TempFile &File;
|
||||
~DiscardTemp();
|
||||
};
|
||||
|
||||
/// Given a bitcode or assembly input filename, parse and return it, or return
|
||||
/// null if not possible.
|
||||
///
|
||||
|
|
|
@ -373,19 +373,17 @@ llvm::SplitFunctionsOutOfModule(Module *M, const std::vector<Function *> &F,
|
|||
std::unique_ptr<Module>
|
||||
BugDriver::extractMappedBlocksFromModule(const std::vector<BasicBlock *> &BBs,
|
||||
Module *M) {
|
||||
SmallString<128> Filename;
|
||||
int FD;
|
||||
std::error_code EC = sys::fs::createUniqueFile(
|
||||
OutputPrefix + "-extractblocks%%%%%%%", FD, Filename);
|
||||
if (EC) {
|
||||
auto Temp = sys::fs::TempFile::create(OutputPrefix + "-extractblocks%%%%%%%");
|
||||
if (!Temp) {
|
||||
outs() << "*** Basic Block extraction failed!\n";
|
||||
errs() << "Error creating temporary file: " << EC.message() << "\n";
|
||||
errs() << "Error creating temporary file: " << toString(Temp.takeError())
|
||||
<< "\n";
|
||||
EmitProgressBitcode(M, "basicblockextractfail", true);
|
||||
return nullptr;
|
||||
}
|
||||
sys::RemoveFileOnSignal(Filename);
|
||||
DiscardTemp Discard{*Temp};
|
||||
|
||||
ToolOutputFile BlocksToNotExtractFile(Filename.c_str(), FD);
|
||||
raw_fd_ostream OS(Temp->FD, /*shouldClose*/ false);
|
||||
for (std::vector<BasicBlock *>::const_iterator I = BBs.begin(), E = BBs.end();
|
||||
I != E; ++I) {
|
||||
BasicBlock *BB = *I;
|
||||
|
@ -393,28 +391,24 @@ BugDriver::extractMappedBlocksFromModule(const std::vector<BasicBlock *> &BBs,
|
|||
// off of.
|
||||
if (!BB->hasName())
|
||||
BB->setName("tmpbb");
|
||||
BlocksToNotExtractFile.os() << BB->getParent()->getName() << " "
|
||||
<< BB->getName() << "\n";
|
||||
OS << BB->getParent()->getName() << " " << BB->getName() << "\n";
|
||||
}
|
||||
BlocksToNotExtractFile.os().close();
|
||||
if (BlocksToNotExtractFile.os().has_error()) {
|
||||
OS.flush();
|
||||
if (OS.has_error()) {
|
||||
errs() << "Error writing list of blocks to not extract\n";
|
||||
EmitProgressBitcode(M, "basicblockextractfail", true);
|
||||
BlocksToNotExtractFile.os().clear_error();
|
||||
OS.clear_error();
|
||||
return nullptr;
|
||||
}
|
||||
BlocksToNotExtractFile.keep();
|
||||
|
||||
std::string uniqueFN = "--extract-blocks-file=";
|
||||
uniqueFN += Filename.str();
|
||||
uniqueFN += Temp->TmpName;
|
||||
const char *ExtraArg = uniqueFN.c_str();
|
||||
|
||||
std::vector<std::string> PI;
|
||||
PI.push_back("extract-blocks");
|
||||
std::unique_ptr<Module> Ret = runPassesOn(M, PI, 1, &ExtraArg);
|
||||
|
||||
sys::fs::remove(Filename.c_str());
|
||||
|
||||
if (!Ret) {
|
||||
outs() << "*** Basic Block extraction failed, please report a bug!\n";
|
||||
EmitProgressBitcode(M, "basicblockextractfail", true);
|
||||
|
|
|
@ -118,11 +118,6 @@ static cl::list<std::string> OptArgs("opt-args", cl::Positional,
|
|||
cl::desc("<opt arguments>..."),
|
||||
cl::ZeroOrMore, cl::PositionalEatsArgs);
|
||||
|
||||
struct DiscardTemp {
|
||||
sys::fs::TempFile &File;
|
||||
~DiscardTemp() { consumeError(File.discard()); }
|
||||
};
|
||||
|
||||
/// runPasses - Run the specified passes on Program, outputting a bitcode file
|
||||
/// and writing the filename into OutputFile if successful. If the
|
||||
/// optimizations fail for some reason (optimizer crashes), return true,
|
||||
|
|
Loading…
Reference in New Issue