Make the verifier API more complete and useful
[oota-llvm.git] / include / llvm / Analysis / Verifier.h
1 //===-- llvm/Analysis/Verifier.h - Module Verifier --------------*- C++ -*-===//
2 // 
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file was developed by the LLVM research group and is distributed under
6 // the University of Illinois Open Source License. See LICENSE.TXT for details.
7 // 
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines the function verifier interface, that can be used for some
11 // sanity checking of input to the system, and for checking that transformations
12 // haven't done something bad.
13 //
14 // Note that this does not provide full 'java style' security and verifications,
15 // instead it just tries to ensure that code is well formed.
16 //
17 // To see what specifically is checked, look at the top of Verifier.cpp
18 //
19 //===----------------------------------------------------------------------===//
20
21 #ifndef LLVM_ANALYSIS_VERIFIER_H
22 #define LLVM_ANALYSIS_VERIFIER_H
23
24 namespace llvm {
25
26 class FunctionPass;
27 class Module;
28 class Function;
29
30 /// @brief An enumeration to specify the action to be taken if errors found.
31 /// 
32 /// This enumeration is used in the functions below to indicate what should
33 /// happen if the verifier finds errors. Each of the functions that uses
34 /// this enumeration as an argument provides a default value for it. The
35 /// actions are listed below.
36 enum VerifierFailureAction { 
37   AbortProcessAction,   ///< verifyModule will print to stderr and abort()
38   ThrowExceptionAction, ///< verifyModule will throw errors as std::string
39   PrintMessageAction,   ///< verifyModule will print to stderr and return true
40   ReturnStatusAction    ///< verifyModule will just return true
41 };
42
43 /// @brief Create a verifier pass.
44 ///
45 /// Check a module or function for validity.  When the pass is used, the
46 /// action indicated by the \p action argument will be used if errors are
47 /// found.
48 FunctionPass *createVerifierPass( 
49   VerifierFailureAction action = AbortProcessAction ///< Action to take
50 );
51
52 /// @brief Check a module for errors. 
53 ///
54 /// If there are no errors, the function returns false. If an error is found, 
55 /// the action taken depends on the \p action parameter.
56 /// This should only be used for debugging, because it plays games with 
57 /// PassManagers and stuff.
58
59 bool verifyModule(
60   const Module &M,  ///< The module to be verified
61   VerifierFailureAction action = AbortProcessAction ///< Action to take
62 );
63
64 // verifyFunction - Check a function for errors, useful for use when debugging a
65 // pass.
66 bool verifyFunction(
67   const Function &F,  ///< The function to be verified
68   VerifierFailureAction action = AbortProcessAction ///< Action to take
69 );
70
71 } // End llvm namespace
72
73 #endif