//===----------------------------------------------------------------------===//
#include "BugDriver.h"
-#include "llvm/Analysis/Verifier.h"
#include "llvm/Bitcode/ReaderWriter.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/Module.h"
+#include "llvm/IR/Verifier.h"
#include "llvm/PassManager.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
using namespace llvm;
+#define DEBUG_TYPE "bugpoint"
+
namespace llvm {
extern cl::opt<std::string> OutputPrefix;
}
// ChildOutput - This option captures the name of the child output file that
// is set up by the parent bugpoint process
cl::opt<std::string> ChildOutput("child-output", cl::ReallyHidden);
+ cl::opt<std::string> OptCmd("opt-command", cl::init(""),
+ cl::desc("Path to opt. (default: search path "
+ "for 'opt'.)"));
}
/// writeProgramToFile - This writes the current "Program" to the named bitcode
bool BugDriver::writeProgramToFile(const std::string &Filename,
const Module *M) const {
std::string ErrInfo;
- tool_output_file Out(Filename.c_str(), ErrInfo, raw_fd_ostream::F_Binary);
+ tool_output_file Out(Filename.c_str(), ErrInfo, sys::fs::F_None);
if (ErrInfo.empty())
return writeProgramToFileAux(Out, M);
return true;
// setup the output file name
outs().flush();
SmallString<128> UniqueFilename;
- error_code EC =
- sys::fs::unique_file(OutputPrefix + "-output-%%%%%%%.bc", UniqueFilename);
+ error_code EC = sys::fs::createUniqueFile(
+ OutputPrefix + "-output-%%%%%%%.bc", UniqueFilename);
if (EC) {
errs() << getToolName() << ": Error making unique filename: "
<< EC.message() << "\n";
// set up the input file name
SmallString<128> InputFilename;
int InputFD;
- EC = sys::fs::unique_file(OutputPrefix + "-input-%%%%%%%.bc", InputFD,
- InputFilename);
+ EC = sys::fs::createUniqueFile(OutputPrefix + "-input-%%%%%%%.bc", InputFD,
+ InputFilename);
if (EC) {
errs() << getToolName() << ": Error making unique filename: "
<< EC.message() << "\n";
return 1;
}
- std::string tool = sys::FindProgramByName("opt");
+ std::string tool = OptCmd.empty()? sys::FindProgramByName("opt") : OptCmd;
if (tool.empty()) {
errs() << "Cannot find `opt' in PATH!\n";
return 1;
Args.push_back(InputFilename.c_str());
for (unsigned i = 0; i < NumExtraArgs; ++i)
Args.push_back(*ExtraArgs);
- Args.push_back(0);
+ Args.push_back(nullptr);
DEBUG(errs() << "\nAbout to run:\t";
for (unsigned i = 0, e = Args.size()-1; i != e; ++i)
// Redirect stdout and stderr to nowhere if SilencePasses is given
StringRef Nowhere;
- const StringRef *Redirects[3] = {0, &Nowhere, &Nowhere};
+ const StringRef *Redirects[3] = {nullptr, &Nowhere, &Nowhere};
std::string ErrMsg;
- int result = sys::ExecuteAndWait(Prog, Args.data(), 0,
- (SilencePasses ? Redirects : 0), Timeout,
- MemoryLimit, &ErrMsg);
+ int result = sys::ExecuteAndWait(Prog, Args.data(), nullptr,
+ (SilencePasses ? Redirects : nullptr),
+ Timeout, MemoryLimit, &ErrMsg);
// If we are supposed to delete the bitcode file or if the passes crashed,
// remove it now. This may fail if the file was never created, but that's ok.
EmitProgressBitcode(M, "pass-error", false);
exit(debugOptimizerCrash());
}
- return 0;
+ return nullptr;
}
Module *Ret = ParseInputFile(BitcodeResult, Context);
- if (Ret == 0) {
+ if (!Ret) {
errs() << getToolName() << ": Error reading bitcode file '"
<< BitcodeResult << "'!\n";
exit(1);