mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
Implement verification feature.
Ensure output occurs even in the face of an error. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14499 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
53d55432cc
commit
86a9a7a9c4
@ -29,6 +29,7 @@
|
|||||||
// the bytecode file (-dump option).
|
// the bytecode file (-dump option).
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
#include "llvm/Analysis/Verifier.h"
|
||||||
#include "llvm/Bytecode/Analyzer.h"
|
#include "llvm/Bytecode/Analyzer.h"
|
||||||
#include "Support/CommandLine.h"
|
#include "Support/CommandLine.h"
|
||||||
#include "llvm/System/Signals.h"
|
#include "llvm/System/Signals.h"
|
||||||
@ -41,7 +42,8 @@ static cl::opt<std::string>
|
|||||||
InputFilename(cl::Positional, cl::desc("<input bytecode>"), cl::init("-"));
|
InputFilename(cl::Positional, cl::desc("<input bytecode>"), cl::init("-"));
|
||||||
|
|
||||||
static cl::opt<bool> NoDetails ("nodetails", cl::desc("Skip detailed output"));
|
static cl::opt<bool> NoDetails ("nodetails", cl::desc("Skip detailed output"));
|
||||||
static cl::opt<bool> Dump ("dump", cl::desc("Detailed output"));
|
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
|
int
|
||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
@ -59,9 +61,25 @@ main(int argc, char **argv)
|
|||||||
/// Determine what to generate
|
/// Determine what to generate
|
||||||
bca.dumpBytecode = Dump;
|
bca.dumpBytecode = Dump;
|
||||||
bca.detailedResults = !NoDetails;
|
bca.detailedResults = !NoDetails;
|
||||||
|
bca.progressiveVerify = Verify;
|
||||||
|
|
||||||
/// Analyze the bytecode file
|
/// Analyze the bytecode file
|
||||||
AnalyzeBytecodeFile(InputFilename, bca, &ErrorMessage);
|
Module* M = AnalyzeBytecodeFile(InputFilename, bca, &ErrorMessage);
|
||||||
|
|
||||||
|
// All that abcd does is write the gathered statistics to the output
|
||||||
|
PrintBytecodeAnalysis(bca,*Out);
|
||||||
|
|
||||||
|
if ( M && Verify ) {
|
||||||
|
std::string verificationMsg;
|
||||||
|
try {
|
||||||
|
verifyModule( *M, ThrowExceptionAction );
|
||||||
|
} catch (std::string& errmsg ) {
|
||||||
|
verificationMsg = errmsg;
|
||||||
|
}
|
||||||
|
if ( verificationMsg.length() > 0 )
|
||||||
|
std::cerr << "Final Verification Message: " << verificationMsg << "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// If there was an error, print it and stop.
|
// If there was an error, print it and stop.
|
||||||
if ( ErrorMessage.size() ) {
|
if ( ErrorMessage.size() ) {
|
||||||
@ -69,8 +87,6 @@ main(int argc, char **argv)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// All that abcd does is write the gathered statistics to the output
|
|
||||||
PrintBytecodeAnalysis(bca,*Out);
|
|
||||||
|
|
||||||
if (Out != &std::cout) {
|
if (Out != &std::cout) {
|
||||||
((std::ofstream*)Out)->close();
|
((std::ofstream*)Out)->close();
|
||||||
|
Loading…
Reference in New Issue
Block a user