summaryrefslogtreecommitdiff
path: root/include/llvm/IR/Verifier.h
blob: 77b1269c06da52a6ba9518113858f139659c2721 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
//===- Verifier.h - LLVM IR Verifier ----------------------------*- C++ -*-===//
//
//                     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.
//
// To see what specifically is checked, look at the top of Verifier.cpp
//
//===----------------------------------------------------------------------===//

#ifndef LLVM_IR_VERIFIER_H
#define LLVM_IR_VERIFIER_H

#include <string>

namespace llvm {

class FunctionPass;
class Module;
class Function;

/// @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
};

/// @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.

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 verifyFunction(
  const Function &F,  ///< The function to be verified
  VerifierFailureAction action = AbortProcessAction ///< Action to take
);

} // End llvm namespace

#endif