X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FAnalysis%2FVerifier.h;h=ce8aeef07645b62ea51d2b31213b3a40dd8e2d86;hb=75b51621540c23ddfc1e9ef6b4dc803453d9d122;hp=7a0ab000d895f7f74f74c24d8bfe45cfa0d8a468;hpb=e7506a366e8bd56c97d10beb68e4db953aebaeca;p=oota-llvm.git diff --git a/include/llvm/Analysis/Verifier.h b/include/llvm/Analysis/Verifier.h index 7a0ab000d89..ce8aeef0764 100644 --- a/include/llvm/Analysis/Verifier.h +++ b/include/llvm/Analysis/Verifier.h @@ -1,7 +1,15 @@ -//===-- llvm/Analysis/Verifier.h - Module Verifier ---------------*- C++ -*-==// +//===-- llvm/Analysis/Verifier.h - LLVM IR Verifier -------------*- C++ -*-===// // -// This file defines the method verifier interface, that can be used for some -// sanity checking of input to the system. +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file defines the function verifier interface, that can be used for some +// sanity checking of input to the system, and for checking that transformations +// haven't done something bad. // // Note that this does not provide full 'java style' security and verifications, // instead it just tries to ensure that code is well formed. @@ -13,22 +21,55 @@ #ifndef LLVM_ANALYSIS_VERIFIER_H #define LLVM_ANALYSIS_VERIFIER_H -class Pass; +#include + +namespace llvm { + +class FunctionPass; class Module; class Function; -// createVerifierPass - Check a module or method for validity. If errors are -// detected, error messages corresponding to the problem are printed to stderr. -// -Pass *createVerifierPass(); +/// @brief An enumeration to specify the action to be taken if errors found. +/// +/// This enumeration is used in the functions below to indicate what should +/// happen if the verifier finds errors. Each of the functions that uses +/// this enumeration as an argument provides a default value for it. The +/// actions are listed below. +enum VerifierFailureAction { + AbortProcessAction, ///< verifyModule will print to stderr and abort() + PrintMessageAction, ///< verifyModule will print to stderr and return true + ReturnStatusAction ///< verifyModule will just return true +}; -// verifyModule - Check a module for errors, printing messages on stderr. -// Return true if the module is corrupt. -// -bool verifyModule(const Module *M); +/// @brief Create a verifier pass. +/// +/// Check a module or function for validity. When the pass is used, the +/// action indicated by the \p action argument will be used if errors are +/// found. +FunctionPass *createVerifierPass( + VerifierFailureAction action = AbortProcessAction ///< Action to take +); + +/// @brief Check a module for errors. +/// +/// If there are no errors, the function returns false. If an error is found, +/// the action taken depends on the \p action parameter. +/// This should only be used for debugging, because it plays games with +/// PassManagers and stuff. -// verifyMethod - Check a method for errors, useful for use when debugging a +bool verifyModule( + const Module &M, ///< The module to be verified + VerifierFailureAction action = AbortProcessAction, ///< Action to take + std::string *ErrorInfo = 0 ///< Information about failures. +); + +// verifyFunction - Check a function for errors, useful for use when debugging a // pass. -bool verifyMethod(const Function *M); +bool verifyFunction( + const Function &F, ///< The function to be verified + VerifierFailureAction action = AbortProcessAction ///< Action to take +); + +} // End llvm namespace #endif