For PR495:
Get rid of the difference between file paths and directory paths. The Path
class now simply stores a path that can refer to either a file or a
directory. This required various changes in the implementation and interface
of the class with the corresponding impact to its users. Doxygen comments were
also updated to reflect these changes. Interface changes are:
appendDirectory -> appendComponent
appendFile -> appendComponent
elideDirectory -> eraseComponent
elideFile -> eraseComponent
elideSuffix -> eraseSuffix
renameFile -> rename
setDirectory -> set
setFile -> set
Changes pass Dejagnu and llvm-test/SingleSource tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@22349 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/tools/bugpoint/CrashDebugger.cpp b/tools/bugpoint/CrashDebugger.cpp
index 6f0e3de..2ede20f 100644
--- a/tools/bugpoint/CrashDebugger.cpp
+++ b/tools/bugpoint/CrashDebugger.cpp
@@ -58,7 +58,7 @@
if (BD.runPasses(Prefix, PfxOutput))
return KeepPrefix;
- PrefixOutput.setFile(PfxOutput);
+ PrefixOutput.set(PfxOutput);
OrigProgram = BD.Program;
BD.Program = ParseInputFile(PrefixOutput.toString());
@@ -67,7 +67,7 @@
<< PrefixOutput << "'!\n";
exit(1);
}
- PrefixOutput.destroyFile();
+ PrefixOutput.destroy();
}
std::cout << "Checking to see if these passes crash: "
diff --git a/tools/bugpoint/ExecutionDriver.cpp b/tools/bugpoint/ExecutionDriver.cpp
index 972338a..936f546 100644
--- a/tools/bugpoint/ExecutionDriver.cpp
+++ b/tools/bugpoint/ExecutionDriver.cpp
@@ -281,7 +281,7 @@
exit(1);
// Remove the intermediate C file
- OutputCFile.destroyFile();
+ OutputCFile.destroy();
return "./" + SharedObjectFile;
}
@@ -302,9 +302,9 @@
// If we're checking the program exit code, assume anything nonzero is bad.
if (CheckProgramExitCode && ProgramExitedNonzero) {
- Output.destroyFile();
+ Output.destroy();
if (RemoveBytecode)
- sys::Path(BytecodeFile).destroyFile();
+ sys::Path(BytecodeFile).destroy();
return true;
}
@@ -321,10 +321,11 @@
}
// Remove the generated output.
- Output.destroyFile();
+ Output.destroy();
// Remove the bytecode file if we are supposed to.
- if (RemoveBytecode) sys::Path(BytecodeFile).destroyFile();
+ if (RemoveBytecode)
+ sys::Path(BytecodeFile).destroy();
return FilesDifferent;
}
diff --git a/tools/bugpoint/Miscompilation.cpp b/tools/bugpoint/Miscompilation.cpp
index 860b9b4..4caf0d4 100644
--- a/tools/bugpoint/Miscompilation.cpp
+++ b/tools/bugpoint/Miscompilation.cpp
@@ -99,7 +99,7 @@
// If the prefix maintains the predicate by itself, only keep the prefix!
if (BD.diffProgram(BytecodeResult)) {
std::cout << " nope.\n";
- sys::Path(BytecodeResult).destroyFile();
+ sys::Path(BytecodeResult).destroy();
return KeepPrefix;
}
std::cout << " yup.\n"; // No miscompilation!
@@ -113,7 +113,7 @@
<< BytecodeResult << "'!\n";
exit(1);
}
- sys::Path(BytecodeResult).destroyFile(); // No longer need the file on disk
+ sys::Path(BytecodeResult).destroy(); // No longer need the file on disk
// Don't check if there are no passes in the suffix.
if (Suffix.empty())
@@ -775,9 +775,9 @@
std::cerr << ": still failing!\n";
else
std::cerr << ": didn't fail.\n";
- TestModuleBC.destroyFile();
- SafeModuleBC.destroyFile();
- sys::Path(SharedObject).destroyFile();
+ TestModuleBC.destroy();
+ SafeModuleBC.destroy();
+ sys::Path(SharedObject).destroy();
return Result;
}
diff --git a/tools/bugpoint/OptimizerDriver.cpp b/tools/bugpoint/OptimizerDriver.cpp
index 5de70be..c6e58fd 100644
--- a/tools/bugpoint/OptimizerDriver.cpp
+++ b/tools/bugpoint/OptimizerDriver.cpp
@@ -161,7 +161,7 @@
// If we are supposed to delete the bytecode file or if the passes crashed,
// remove it now. This may fail if the file was never created, but that's ok.
if (DeleteOutput || !ExitedOK)
- sys::Path(OutputFilename).destroyFile();
+ sys::Path(OutputFilename).destroy();
#ifndef PLATFORMINDEPENDENT
if (!Quiet) {
@@ -214,6 +214,6 @@
<< BytecodeResult << "'!\n";
exit(1);
}
- sys::Path(BytecodeResult).destroyFile(); // No longer need the file on disk
+ sys::Path(BytecodeResult).destroy(); // No longer need the file on disk
return Ret;
}
diff --git a/tools/bugpoint/ToolRunner.cpp b/tools/bugpoint/ToolRunner.cpp
index 9ef14c5..4a08e1a 100644
--- a/tools/bugpoint/ToolRunner.cpp
+++ b/tools/bugpoint/ToolRunner.cpp
@@ -65,7 +65,7 @@
ErrorFile.close();
}
- ErrorFilename.destroyFile();
+ ErrorFilename.destroy();
throw ToolExecutionError(OS.str());
}
@@ -176,7 +176,7 @@
void LLC::compileProgram(const std::string &Bytecode) {
sys::Path OutputAsmFile;
OutputAsm(Bytecode, OutputAsmFile);
- OutputAsmFile.destroyFile();
+ OutputAsmFile.destroy();
}
int LLC::ExecuteProgram(const std::string &Bytecode,
@@ -321,7 +321,7 @@
void CBE::compileProgram(const std::string &Bytecode) {
sys::Path OutputCFile;
OutputC(Bytecode, OutputCFile);
- OutputCFile.destroyFile();
+ OutputCFile.destroy();
}
int CBE::ExecuteProgram(const std::string &Bytecode,
diff --git a/tools/gccld/GenerateCode.cpp b/tools/gccld/GenerateCode.cpp
index 020d883..f6a08ce 100644
--- a/tools/gccld/GenerateCode.cpp
+++ b/tools/gccld/GenerateCode.cpp
@@ -152,15 +152,11 @@
static bool isBytecodeLPath(const std::string &LibPath) {
bool isBytecodeLPath = false;
- // Make sure the -L path has a '/' character
- // because llvm-g++ passes them without the ending
- // '/' char and sys::Path doesn't think it is a
- // directory (see: sys::Path::isDirectory) without it
- std::string dir = LibPath;
- if ( dir[dir.length()-1] != '/' )
- dir.append("/");
+ sys::Path LPath(LibPath);
- sys::Path LPath(dir);
+ // Make sure its a directory
+ if (!LPath.isDirectory())
+ return isBytecodeLPath;
// Grab the contents of the -L path
std::set<sys::Path> Files;
diff --git a/tools/gccld/gccld.cpp b/tools/gccld/gccld.cpp
index 6d49466..7a4dec3 100644
--- a/tools/gccld/gccld.cpp
+++ b/tools/gccld/gccld.cpp
@@ -313,9 +313,9 @@
if (!SaveTemps) {
// Remove the assembly language file.
- AssemblyFile.destroyFile();
+ AssemblyFile.destroy();
// Remove the bytecode language file.
- sys::Path(RealBytecodeOutput).destroyFile();
+ sys::Path(RealBytecodeOutput).destroy();
}
} else if (NativeCBE) {
@@ -345,9 +345,9 @@
if (!SaveTemps) {
// Remove the assembly language file.
- CFile.destroyFile();
+ CFile.destroy();
// Remove the bytecode language file.
- sys::Path(RealBytecodeOutput).destroyFile();
+ sys::Path(RealBytecodeOutput).destroy();
}
} else if (!LinkAsLibrary) {
diff --git a/tools/llvm-ar/llvm-ar.cpp b/tools/llvm-ar/llvm-ar.cpp
index cc3d2d8..3725a17 100644
--- a/tools/llvm-ar/llvm-ar.cpp
+++ b/tools/llvm-ar/llvm-ar.cpp
@@ -293,7 +293,7 @@
void buildPaths(bool checkExistence = true) {
for (unsigned i = 0; i < Members.size(); i++) {
sys::Path aPath;
- if (!aPath.setFile(Members[i]))
+ if (!aPath.set(Members[i]))
throw std::string("File member name invalid: ") + Members[i];
if (checkExistence) {
if (!aPath.exists())
@@ -431,7 +431,7 @@
// Make sure the intervening directories are created
if (I->hasPath()) {
sys::Path dirs(I->getPath());
- dirs.elideFile();
+ dirs.eraseComponent();
dirs.createDirectory(/*create_parents=*/true);
}
@@ -669,7 +669,7 @@
// Check the path name of the archive
sys::Path ArchivePath;
- if (!ArchivePath.setFile(ArchiveName))
+ if (!ArchivePath.set(ArchiveName))
throw std::string("Archive name invalid: ") + ArchiveName;
// Create or open the archive object.
diff --git a/tools/llvm-ld/llvm-ld.cpp b/tools/llvm-ld/llvm-ld.cpp
index ccd643e..23efb48 100644
--- a/tools/llvm-ld/llvm-ld.cpp
+++ b/tools/llvm-ld/llvm-ld.cpp
@@ -480,7 +480,7 @@
gcc, envp);
// Remove the assembly language file.
- AssemblyFile.destroyFile();
+ AssemblyFile.destroy();
} else if (NativeCBE) {
sys::Path CFile (OutputFilename);
CFile.appendSuffix("cbe.c");
@@ -505,7 +505,7 @@
GenerateNative(OutputFilename, CFile.toString(), Libraries, gcc, envp);
// Remove the assembly language file.
- CFile.destroyFile();
+ CFile.destroy();
} else {
EmitShellScript(argv);
diff --git a/tools/llvm-link/llvm-link.cpp b/tools/llvm-link/llvm-link.cpp
index 9db1890..eb14c17 100644
--- a/tools/llvm-link/llvm-link.cpp
+++ b/tools/llvm-link/llvm-link.cpp
@@ -50,7 +50,7 @@
//
static inline std::auto_ptr<Module> LoadFile(const std::string &FN) {
sys::Path Filename;
- if (!Filename.setFile(FN)) {
+ if (!Filename.set(FN)) {
std::cerr << "Invalid file name: '" << FN << "'\n";
return std::auto_ptr<Module>();
}
diff --git a/tools/llvm-ranlib/llvm-ranlib.cpp b/tools/llvm-ranlib/llvm-ranlib.cpp
index e2fbf7d..d7d4714 100644
--- a/tools/llvm-ranlib/llvm-ranlib.cpp
+++ b/tools/llvm-ranlib/llvm-ranlib.cpp
@@ -59,7 +59,7 @@
// Check the path name of the archive
sys::Path ArchivePath;
- if (!ArchivePath.setFile(ArchiveName))
+ if (!ArchivePath.set(ArchiveName))
throw std::string("Archive name invalid: ") + ArchiveName;
// Make sure it exists, we don't create empty archives
diff --git a/tools/llvmc/CompilerDriver.cpp b/tools/llvmc/CompilerDriver.cpp
index 34e4038..659af16 100644
--- a/tools/llvmc/CompilerDriver.cpp
+++ b/tools/llvmc/CompilerDriver.cpp
@@ -134,7 +134,7 @@
StringVector::const_iterator E = paths.end();
while (I != E) {
sys::Path tmp;
- tmp.setDirectory(*I);
+ tmp.set(*I);
IncludePaths.push_back(tmp);
++I;
}
@@ -149,7 +149,7 @@
StringVector::const_iterator E = paths.end();
while (I != E) {
sys::Path tmp;
- tmp.setDirectory(*I);
+ tmp.set(*I);
LibraryPaths.push_back(tmp);
++I;
}
@@ -188,7 +188,7 @@
void cleanup() {
if (!isSet(KEEP_TEMPS_FLAG)) {
if (TempDir.isDirectory() && TempDir.canWrite())
- TempDir.destroyDirectory(/*remove_contents=*/true);
+ TempDir.destroy(/*remove_contents=*/true);
} else {
std::cout << "Temporary files are in " << TempDir << "\n";
}
@@ -197,7 +197,7 @@
sys::Path MakeTempFile(const std::string& basename,
const std::string& suffix) {
sys::Path result(TempDir);
- if (!result.appendFile(basename))
+ if (!result.appendComponent(basename))
throw basename + ": can't use this file name";
if (!result.appendSuffix(suffix))
throw suffix + ": can't use this file suffix";
@@ -448,13 +448,13 @@
llvm::sys::Path GetPathForLinkageItem(const std::string& link_item,
bool native = false) {
sys::Path fullpath;
- fullpath.setFile(link_item);
+ fullpath.set(link_item);
if (fullpath.canRead())
return fullpath;
for (PathVector::iterator PI = LibraryPaths.begin(),
PE = LibraryPaths.end(); PI != PE; ++PI) {
- fullpath.setDirectory(PI->toString());
- fullpath.appendFile(link_item);
+ fullpath.set(PI->toString());
+ fullpath.appendComponent(link_item);
if (fullpath.canRead())
return fullpath;
if (native) {
@@ -463,16 +463,16 @@
fullpath.appendSuffix("bc");
if (fullpath.canRead())
return fullpath;
- fullpath.elideSuffix();
+ fullpath.eraseSuffix();
fullpath.appendSuffix("o");
if (fullpath.canRead())
return fullpath;
fullpath = *PI;
- fullpath.appendFile(std::string("lib") + link_item);
+ fullpath.appendComponent(std::string("lib") + link_item);
fullpath.appendSuffix("a");
if (fullpath.canRead())
return fullpath;
- fullpath.elideSuffix();
+ fullpath.eraseSuffix();
fullpath.appendSuffix("so");
if (fullpath.canRead())
return fullpath;
@@ -693,7 +693,7 @@
/// The output of the translator is an LLVM Assembly program
/// We need to translate it to bytecode
Action* action = new Action();
- action->program.setFile("llvm-as");
+ action->program.set("llvm-as");
action->args.push_back(InFile.toString());
action->args.push_back("-o");
InFile.appendSuffix("bc");
@@ -735,7 +735,7 @@
/// The output of the optimizer is an LLVM Assembly program
/// We need to translate it to bytecode with llvm-as
Action* action = new Action();
- action->program.setFile("llvm-as");
+ action->program.set("llvm-as");
action->args.push_back(InFile.toString());
action->args.push_back("-f");
action->args.push_back("-o");
@@ -764,7 +764,7 @@
Action* action = new Action();
if (isSet(EMIT_NATIVE_FLAG)) {
// Use llc to get the native assembly file
- action->program.setFile("llc");
+ action->program.set("llc");
action->args.push_back(InFile.toString());
action->args.push_back("-f");
action->args.push_back("-o");
@@ -777,7 +777,7 @@
actions.push_back(action);
} else {
// Just convert back to llvm assembly with llvm-dis
- action->program.setFile("llvm-dis");
+ action->program.set("llvm-dis");
action->args.push_back(InFile.toString());
action->args.push_back("-f");
action->args.push_back("-o");
@@ -820,7 +820,7 @@
// Set up the linking action with llvm-ld
Action* link = new Action();
- link->program.setFile("llvm-ld");
+ link->program.set("llvm-ld");
// Add in the optimization level requested
switch (optLevel) {
diff --git a/tools/llvmc/Configuration.cpp b/tools/llvmc/Configuration.cpp
index 27b1b3f..bc538ca 100644
--- a/tools/llvmc/Configuration.cpp
+++ b/tools/llvmc/Configuration.cpp
@@ -318,7 +318,7 @@
{
std::string progname;
if (parseProgramName(progname))
- action.program.setFile(progname);
+ action.program.set(progname);
else
error("Expecting a program name");
@@ -547,8 +547,8 @@
// Try the environment variable
const char* conf = getenv("LLVM_CONFIG_DIR");
if (conf) {
- confFile.setDirectory(conf);
- confFile.appendFile(ftype);
+ confFile.set(conf);
+ confFile.appendComponent(ftype);
if (!confFile.canRead())
throw std::string("Configuration file for '") + ftype +
"' is not available.";
@@ -556,20 +556,20 @@
// Try the user's home directory
confFile = sys::Path::GetUserHomeDirectory();
if (!confFile.isEmpty()) {
- confFile.appendDirectory(".llvm");
- confFile.appendDirectory("etc");
- confFile.appendFile(ftype);
+ confFile.appendComponent(".llvm");
+ confFile.appendComponent("etc");
+ confFile.appendComponent(ftype);
if (!confFile.canRead())
confFile.clear();
}
if (confFile.isEmpty()) {
// Okay, try the LLVM installation directory
confFile = sys::Path::GetLLVMConfigDir();
- confFile.appendFile(ftype);
+ confFile.appendComponent(ftype);
if (!confFile.canRead()) {
// Okay, try the "standard" place
confFile = sys::Path::GetLLVMDefaultConfigDir();
- confFile.appendFile(ftype);
+ confFile.appendComponent(ftype);
if (!confFile.canRead()) {
throw std::string("Configuration file for '") + ftype +
"' is not available.";
@@ -579,7 +579,7 @@
}
} else {
confFile = configDir;
- confFile.appendFile(ftype);
+ confFile.appendComponent(ftype);
if (!confFile.canRead())
throw std::string("Configuration file for '") + ftype +
"' is not available.";