For PR351:

* Convert use of getUniqueFilename to sys::Path::makeUnique();

llvm-svn: 18949
This commit is contained in:
Reid Spencer 2004-12-15 01:53:08 +00:00
parent 9329172767
commit 30067f1eac
3 changed files with 34 additions and 20 deletions

View File

@ -152,18 +152,19 @@ bool BugDriver::initializeExecutionEnvironment() {
///
void BugDriver::compileProgram(Module *M) {
// Emit the program to a bytecode file...
std::string BytecodeFile = getUniqueFilename("bugpoint-test-program.bc");
if (writeProgramToFile(BytecodeFile, M)) {
sys::Path BytecodeFile ("bugpoint-test-program.bc");
BytecodeFile.makeUnique();
if (writeProgramToFile(BytecodeFile.toString(), M)) {
std::cerr << ToolName << ": Error emitting bytecode to file '"
<< BytecodeFile << "'!\n";
exit(1);
}
// Remove the temporary bytecode file when we are done.
FileRemover BytecodeFileRemover(BytecodeFile);
FileRemover BytecodeFileRemover(BytecodeFile.toString());
// Actually compile the program!
Interpreter->compileProgram(BytecodeFile);
Interpreter->compileProgram(BytecodeFile.toString());
}
@ -181,7 +182,9 @@ std::string BugDriver::executeProgram(std::string OutputFile,
bool CreatedBytecode = false;
if (BytecodeFile.empty()) {
// Emit the program to a bytecode file...
BytecodeFile = getUniqueFilename("bugpoint-test-program.bc");
sys::Path uniqueFilename("bugpoint-test-program.bc");
uniqueFilename.makeUnique();
BytecodeFile = uniqueFilename.toString();
if (writeProgramToFile(BytecodeFile, Program)) {
std::cerr << ToolName << ": Error emitting bytecode to file '"
@ -197,7 +200,9 @@ std::string BugDriver::executeProgram(std::string OutputFile,
if (OutputFile.empty()) OutputFile = "bugpoint-execution-output";
// Check to see if this is a valid output filename...
OutputFile = getUniqueFilename(OutputFile);
sys::Path uniqueFile(OutputFile);
uniqueFile.makeUnique();
OutputFile = uniqueFile.toString();
// Figure out which shared objects to run, if any.
std::vector<std::string> SharedObjs(AdditionalSOs);

View File

@ -733,33 +733,35 @@ static void CleanupAndPrepareModules(BugDriver &BD, Module *&Test,
static bool TestCodeGenerator(BugDriver &BD, Module *Test, Module *Safe) {
CleanupAndPrepareModules(BD, Test, Safe);
std::string TestModuleBC = getUniqueFilename("bugpoint.test.bc");
if (BD.writeProgramToFile(TestModuleBC, Test)) {
sys::Path TestModuleBC("bugpoint.test.bc");
TestModuleBC.makeUnique();
if (BD.writeProgramToFile(TestModuleBC.toString(), Test)) {
std::cerr << "Error writing bytecode to `" << TestModuleBC << "'\nExiting.";
exit(1);
}
delete Test;
// Make the shared library
std::string SafeModuleBC = getUniqueFilename("bugpoint.safe.bc");
sys::Path SafeModuleBC("bugpoint.safe.bc");
SafeModuleBC.makeUnique();
if (BD.writeProgramToFile(SafeModuleBC, Safe)) {
if (BD.writeProgramToFile(SafeModuleBC.toString(), Safe)) {
std::cerr << "Error writing bytecode to `" << SafeModuleBC << "'\nExiting.";
exit(1);
}
std::string SharedObject = BD.compileSharedObject(SafeModuleBC);
std::string SharedObject = BD.compileSharedObject(SafeModuleBC.toString());
delete Safe;
// Run the code generator on the `Test' code, loading the shared library.
// The function returns whether or not the new output differs from reference.
int Result = BD.diffProgram(TestModuleBC, SharedObject, false);
int Result = BD.diffProgram(TestModuleBC.toString(), SharedObject, false);
if (Result)
std::cerr << ": still failing!\n";
else
std::cerr << ": didn't fail.\n";
removeFile(TestModuleBC);
removeFile(SafeModuleBC);
removeFile(TestModuleBC.toString());
removeFile(SafeModuleBC.toString());
removeFile(SharedObject);
return Result;
@ -791,20 +793,24 @@ bool BugDriver::debugCodeGenerator() {
// Condition the modules
CleanupAndPrepareModules(*this, ToCodeGen, ToNotCodeGen);
std::string TestModuleBC = getUniqueFilename("bugpoint.test.bc");
if (writeProgramToFile(TestModuleBC, ToCodeGen)) {
sys::Path TestModuleBC("bugpoint.test.bc");
TestModuleBC.makeUnique();
if (writeProgramToFile(TestModuleBC.toString(), ToCodeGen)) {
std::cerr << "Error writing bytecode to `" << TestModuleBC << "'\nExiting.";
exit(1);
}
delete ToCodeGen;
// Make the shared library
std::string SafeModuleBC = getUniqueFilename("bugpoint.safe.bc");
if (writeProgramToFile(SafeModuleBC, ToNotCodeGen)) {
sys::Path SafeModuleBC("bugpoint.safe.bc");
SafeModuleBC.makeUnique();
if (writeProgramToFile(SafeModuleBC.toString(), ToNotCodeGen)) {
std::cerr << "Error writing bytecode to `" << SafeModuleBC << "'\nExiting.";
exit(1);
}
std::string SharedObject = compileSharedObject(SafeModuleBC);
std::string SharedObject = compileSharedObject(SafeModuleBC.toString());
delete ToNotCodeGen;
std::cout << "You can reproduce the problem with the command line: \n";

View File

@ -22,6 +22,7 @@
#include "llvm/Bytecode/WriteBytecodePass.h"
#include "llvm/Target/TargetData.h"
#include "llvm/Support/FileUtilities.h"
#include "llvm/System/Path.h"
#include <fstream>
#include <unistd.h>
#include <sys/types.h>
@ -114,7 +115,9 @@ bool BugDriver::runPasses(const std::vector<const PassInfo*> &Passes,
std::string &OutputFilename, bool DeleteOutput,
bool Quiet) const{
std::cout << std::flush;
OutputFilename = getUniqueFilename("bugpoint-output.bc");
sys::Path uniqueFilename("bugpoint-output.bc");
uniqueFilename.makeUnique();
OutputFilename = uniqueFilename.toString();
pid_t child_pid;
switch (child_pid = fork()) {