For PR351:

* Place a try/catch block around the entire tool to Make sure std::string
  exceptions are caught and printed before exiting the tool.
* Make sure we catch unhandled exceptions at the top level so that we don't
  abort with a useless message but indicate than an unhandled exception was
  generated.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19192 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Reid Spencer 2004-12-30 05:36:08 +00:00
parent c18671cdcd
commit 1ef8bdaedb
17 changed files with 960 additions and 852 deletions

View File

@ -116,6 +116,7 @@ namespace {
}
int main(int argc, char **argv) {
try {
cl::ParseCommandLineOptions(argc, argv, " llvm analysis printer tool\n");
sys::PrintStackTraceOnErrorSignal();
@ -170,4 +171,11 @@ int main(int argc, char **argv) {
delete CurMod;
return 0;
} catch (const std::string& msg) {
std::cerr << argv[0] << ": " << msg << "\n";
} catch (...) {
std::cerr << argv[0] << ": Unexpected unknown exception occurred.\n";
}
return 1;
}

View File

@ -51,10 +51,11 @@ int main(int argc, char **argv) {
return D.run();
} catch (ToolExecutionError &TEE) {
std::cerr << "Tool execution error: " << TEE.what() << '\n';
return 1;
} catch (const std::string& msg) {
std::cerr << argv[0] << ": " << msg << "\n";
} catch (...) {
std::cerr << "Whoops, an exception leaked out of bugpoint. "
<< "This is a bug in bugpoint!\n";
}
return 1;
}
}

View File

@ -45,6 +45,7 @@ ExtractFunc("func", cl::desc("Specify function to extract"), cl::init("main"),
cl::value_desc("function"));
int main(int argc, char **argv) {
try {
cl::ParseCommandLineOptions(argc, argv, " llvm extractor\n");
sys::PrintStackTraceOnErrorSignal();
@ -94,4 +95,10 @@ int main(int argc, char **argv) {
if (Out != &std::cout)
delete Out;
return 0;
} catch (const std::string& msg) {
std::cerr << argv[0] << ": " << msg << "\n";
} catch (...) {
std::cerr << argv[0] << ": Unexpected unknown exception occurred.\n";
}
return 1;
}

View File

@ -128,7 +128,9 @@ void AddConfiguredTransformationPasses(PassManager &PM) {
int main(int argc, char **argv) {
cl::ParseCommandLineOptions(argc, argv, " llvm .s -> .o assembler for GCC\n");
try {
cl::ParseCommandLineOptions(argc, argv,
" llvm .s -> .o assembler for GCC\n");
sys::PrintStackTraceOnErrorSignal();
std::auto_ptr<Module> M;
@ -201,4 +203,10 @@ int main(int argc, char **argv) {
if (Out != &std::cout) delete Out;
return 0;
} catch (const std::string& msg) {
std::cerr << argv[0] << ": " << msg << "\n";
} catch (...) {
std::cerr << argv[0] << ": Unexpected unknown exception occurred.\n";
}
return 1;
}

View File

@ -63,6 +63,7 @@ GetFileNameRoot(const std::string &InputFilename) {
// main - Entry point for the llc compiler.
//
int main(int argc, char **argv) {
try {
cl::ParseCommandLineOptions(argc, argv, " llvm system compiler\n");
sys::PrintStackTraceOnErrorSignal();
@ -169,4 +170,10 @@ int main(int argc, char **argv) {
if (Out != &std::cout) delete Out;
return 0;
} catch (const std::string& msg) {
std::cerr << argv[0] << ": " << msg << "\n";
} catch (...) {
std::cerr << argv[0] << ": Unexpected unknown exception occurred.\n";
}
return 1;
}

View File

@ -47,6 +47,7 @@ namespace {
// main Driver function
//
int main(int argc, char **argv, char * const *envp) {
try {
cl::ParseCommandLineOptions(argc, argv,
" llvm interpreter & dynamic compiler\n");
sys::PrintStackTraceOnErrorSignal();
@ -105,4 +106,10 @@ int main(int argc, char **argv, char * const *envp) {
std::cerr << "ERROR: exit(" << Result << ") returned!\n";
abort();
} catch (const std::string& msg) {
std::cerr << argv[0] << ": " << msg << "\n";
} catch (...) {
std::cerr << argv[0] << ": Unexpected unknown exception occurred.\n";
}
abort();
}

View File

@ -52,6 +52,7 @@ int main(int argc, char **argv) {
cl::ParseCommandLineOptions(argc, argv, " llvm .ll -> .bc assembler\n");
sys::PrintStackTraceOnErrorSignal();
int exitCode = 0;
std::ostream *Out = 0;
try {
// Parse the file now...
@ -126,10 +127,16 @@ int main(int argc, char **argv) {
WriteBytecodeToFile(M.get(), *Out, !NoCompress);
} catch (const ParseException &E) {
std::cerr << argv[0] << ": " << E.getMessage() << "\n";
return 1;
exitCode = 1;
} catch (const std::string& msg) {
std::cerr << argv[0] << ": " << msg << "\n";
exitCode = 1;
} catch (...) {
std::cerr << argv[0] << ": Unexpected unknown exception occurred.\n";
exitCode = 1;
}
if (Out != &std::cout) delete Out;
return 0;
return exitCode;
}

View File

@ -49,8 +49,8 @@ static cl::opt<bool> Dump ("dump", cl::desc("Dump low level bytecode trace"
static cl::opt<bool> Verify ("verify", cl::desc("Progressively verify module"));
int
main(int argc, char **argv)
{
main(int argc, char **argv) {
try {
cl::ParseCommandLineOptions(argc, argv,
" llvm-bcanalyzer Analysis of ByteCode Dumper\n");
@ -95,6 +95,12 @@ main(int argc, char **argv)
delete Out;
}
return 0;
} catch (const std::string& msg) {
std::cerr << argv[0] << ": " << msg << "\n";
} catch (...) {
std::cerr << argv[0] << ": Unexpected unknown exception occurred.\n";
}
return 1;
}
// vim: sw=2

View File

@ -50,6 +50,7 @@ namespace {
// main Driver function
//
int main(int argc, char **argv, char * const *envp) {
try {
cl::ParseCommandLineOptions(argc, argv,
" llvm source-level debugger\n");
sys::PrintStackTraceOnErrorSignal();
@ -85,4 +86,10 @@ int main(int argc, char **argv, char * const *envp) {
// Now that we have initialized the debugger, run it.
return D.run();
} catch (const std::string& msg) {
std::cerr << argv[0] << ": " << msg << "\n";
} catch (...) {
std::cerr << argv[0] << ": Unexpected unknown exception occurred.\n";
}
return 1;
}

View File

@ -41,6 +41,7 @@ static cl::opt<bool>
CWriteMode("c", cl::desc("Obsolete option, do not use"), cl::ReallyHidden);
int main(int argc, char **argv) {
try {
cl::ParseCommandLineOptions(argc, argv, " llvm .bc -> .ll disassembler\n");
sys::PrintStackTraceOnErrorSignal();
@ -117,5 +118,11 @@ int main(int argc, char **argv) {
delete Out;
}
return 0;
} catch (const std::string& msg) {
std::cerr << argv[0] << ": " << msg << "\n";
} catch (...) {
std::cerr << argv[0] << ": Unexpected unknown exception occurred.\n";
}
return 1;
}

View File

@ -45,6 +45,7 @@ ExtractFunc("func", cl::desc("Specify function to extract"), cl::init("main"),
cl::value_desc("function"));
int main(int argc, char **argv) {
try {
cl::ParseCommandLineOptions(argc, argv, " llvm extractor\n");
sys::PrintStackTraceOnErrorSignal();
@ -94,4 +95,10 @@ int main(int argc, char **argv) {
if (Out != &std::cout)
delete Out;
return 0;
} catch (const std::string& msg) {
std::cerr << argv[0] << ": " << msg << "\n";
} catch (...) {
std::cerr << argv[0] << ": Unexpected unknown exception occurred.\n";
}
return 1;
}

View File

@ -389,6 +389,7 @@ extern void Optimize(Module*);
}
int main(int argc, char **argv, char **envp) {
try {
// Initial global variable above for convenience printing of program name.
progname = sys::Path(argv[0]).getBasename();
Linker TheLinker(progname, Verbose);
@ -511,4 +512,10 @@ int main(int argc, char **argv, char **envp) {
}
return 0;
} catch (const std::string& msg) {
std::cerr << argv[0] << ": " << msg << "\n";
} catch (...) {
std::cerr << argv[0] << ": Unexpected unknown exception occurred.\n";
}
return 1;
}

View File

@ -75,6 +75,7 @@ static inline std::auto_ptr<Module> LoadFile(const std::string &FN) {
}
int main(int argc, char **argv) {
try {
cl::ParseCommandLineOptions(argc, argv, " llvm linker\n");
sys::PrintStackTraceOnErrorSignal();
assert(InputFilenames.size() > 0 && "OneOrMore is not working");
@ -141,4 +142,10 @@ int main(int argc, char **argv) {
if (Out != &std::cout) delete Out;
return 0;
} catch (const std::string& msg) {
std::cerr << argv[0] << ": " << msg << "\n";
} catch (...) {
std::cerr << argv[0] << ": Unexpected unknown exception occurred.\n";
}
return 1;
}

View File

@ -152,6 +152,7 @@ void DumpSymbolNamesFromFile (std::string &Filename) {
}
int main(int argc, char **argv) {
try {
cl::ParseCommandLineOptions(argc, argv, " llvm symbol table dumper\n");
sys::PrintStackTraceOnErrorSignal();
@ -168,4 +169,10 @@ int main(int argc, char **argv) {
std::for_each (InputFilenames.begin (), InputFilenames.end (),
DumpSymbolNamesFromFile);
return 0;
} catch (const std::string& msg) {
std::cerr << argv[0] << ": " << msg << "\n";
} catch (...) {
std::cerr << argv[0] << ": Unexpected unknown exception occurred.\n";
}
return 1;
}

View File

@ -107,6 +107,7 @@ namespace {
int main(int argc, char **argv) {
try {
cl::ParseCommandLineOptions(argc, argv, " llvm profile dump decoder\n");
sys::PrintStackTraceOnErrorSignal();
@ -227,4 +228,10 @@ int main(int argc, char **argv) {
}
return 0;
} catch (const std::string& msg) {
std::cerr << argv[0] << ": " << msg << "\n";
} catch (...) {
std::cerr << argv[0] << ": Unexpected unknown exception occurred.\n";
}
return 1;
}

View File

@ -368,4 +368,5 @@ int main(int argc, char **argv) {
} catch (...) {
std::cerr << argv[0] << ": Unexpected unknown exception occurred.\n";
}
return 1;
}

View File

@ -70,6 +70,7 @@ QuietA("quiet", cl::desc("Alias for -q"), cl::aliasopt(Quiet));
// main for opt
//
int main(int argc, char **argv) {
try {
cl::ParseCommandLineOptions(argc, argv,
" llvm .bc -> .bc modular optimizer\n");
sys::PrintStackTraceOnErrorSignal();
@ -168,4 +169,10 @@ int main(int argc, char **argv) {
Passes.run(*M.get());
return 0;
} catch (const std::string& msg) {
std::cerr << argv[0] << ": " << msg << "\n";
} catch (...) {
std::cerr << argv[0] << ": Unexpected unknown exception occurred.\n";
}
return 1;
}