1 //===-- llvm/Analysis/Verifier.h - LLVM IR Verifier -------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // 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 #include <string>
25 
26 namespace llvm {
27 
28 class FunctionPass;
29 class Module;
30 class Function;
31 
32 /// @brief An enumeration to specify the action to be taken if errors found.
33 ///
34 /// This enumeration is used in the functions below to indicate what should
35 /// happen if the verifier finds errors. Each of the functions that uses
36 /// this enumeration as an argument provides a default value for it. The
37 /// actions are listed below.
38 enum VerifierFailureAction {
39   AbortProcessAction,   ///< verifyModule will print to stderr and abort()
40   PrintMessageAction,   ///< verifyModule will print to stderr and return true
41   ReturnStatusAction    ///< verifyModule will just return true
42 };
43 
44 /// @brief Create a verifier pass.
45 ///
46 /// Check a module or function for validity.  When the pass is used, the
47 /// action indicated by the \p action argument will be used if errors are
48 /// found.
49 FunctionPass *createVerifierPass(
50   VerifierFailureAction action = AbortProcessAction ///< Action to take
51 );
52 
53 /// @brief Check a module for errors.
54 ///
55 /// If there are no errors, the function returns false. If an error is found,
56 /// the action taken depends on the \p action parameter.
57 /// This should only be used for debugging, because it plays games with
58 /// PassManagers and stuff.
59 
60 bool verifyModule(
61   const Module &M,  ///< The module to be verified
62   VerifierFailureAction action = AbortProcessAction, ///< Action to take
63   std::string *ErrorInfo = 0      ///< Information about failures.
64 );
65 
66 // verifyFunction - Check a function for errors, useful for use when debugging a
67 // pass.
68 bool verifyFunction(
69   const Function &F,  ///< The function to be verified
70   VerifierFailureAction action = AbortProcessAction ///< Action to take
71 );
72 
73 } // End llvm namespace
74 
75 #endif
76