diff options
| author | Chris Lattner <sabre@nondot.org> | 2004-02-18 21:02:04 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2004-02-18 21:02:04 +0000 |
| commit | 025262692a6710de29a48e2b3905672cd12d13d2 (patch) | |
| tree | 1730e50e0aa5132a62f15c28d86918b2ff5e087d /tools/bugpoint/BugDriver.cpp | |
| parent | a3de11783f04a53ffb625a7ced7d6080705c9762 (diff) | |
Add a stub for debugging code generator crashes
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@11602 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/bugpoint/BugDriver.cpp')
| -rw-r--r-- | tools/bugpoint/BugDriver.cpp | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/tools/bugpoint/BugDriver.cpp b/tools/bugpoint/BugDriver.cpp index 08f2bb5a0b..14e5606f6c 100644 --- a/tools/bugpoint/BugDriver.cpp +++ b/tools/bugpoint/BugDriver.cpp @@ -19,6 +19,7 @@ #include "llvm/Assembly/Parser.h" #include "llvm/Bytecode/Reader.h" #include "llvm/Transforms/Utils/Linker.h" +#include "llvm/Support/ToolRunner.h" #include "Support/CommandLine.h" #include "Support/FileUtilities.h" #include <memory> @@ -131,7 +132,7 @@ bool BugDriver::run() { if (!PassesToRun.empty()) { std::cout << "Running selected passes on program to test for crash: "; if (runPasses(PassesToRun)) - return debugCrash(); + return debugOptimizerCrash(); } // Set up the execution environment, selecting a method to run LLVM bytecode. @@ -144,9 +145,20 @@ bool BugDriver::run() { bool CreatedOutput = false; if (ReferenceOutputFile.empty()) { std::cout << "Generating reference output from raw program..."; - ReferenceOutputFile = executeProgramWithCBE("bugpoint.reference.out"); - CreatedOutput = true; - std::cout << "Reference output is: " << ReferenceOutputFile << "\n"; + try { + ReferenceOutputFile = executeProgramWithCBE("bugpoint.reference.out"); + CreatedOutput = true; + std::cout << "Reference output is: " << ReferenceOutputFile << "\n"; + } catch (ToolExecutionError &TEE) { + std::cerr << TEE.getMessage(); + if (Interpreter != cbe) { + std::cerr << "*** There is a bug running the C backend. Either debug" + << " it (use the -run-cbe bugpoint option), or fix the error" + << " some other way.\n"; + return 1; + } + return debugCodeGeneratorCrash(); + } } // Make sure the reference output file gets deleted on exit from this @@ -156,9 +168,14 @@ bool BugDriver::run() { // Diff the output of the raw program against the reference output. If it // matches, then we have a miscompilation bug. std::cout << "*** Checking the code generator...\n"; - if (!diffProgram()) { - std::cout << "\n*** Debugging miscompilation!\n"; - return debugMiscompilation(); + try { + if (!diffProgram()) { + std::cout << "\n*** Debugging miscompilation!\n"; + return debugMiscompilation(); + } + } catch (ToolExecutionError &TEE) { + std::cerr << TEE.getMessage() << "*** Debugging code generator crash!\n"; + return debugCodeGeneratorCrash(); } std::cout << "\n*** Input program does not match reference diff!\n"; |
