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
26namespace llvm {
27
28class FunctionPass;
29class Module;
30class 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.
38enum 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.
49FunctionPass *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
60bool 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.
68bool 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