2010-04-08 19:41:04 +02:00
|
|
|
//===-- llvm/Analysis/Verifier.h - LLVM IR Verifier -------------*- C++ -*-===//
|
2005-04-21 22:19:05 +02:00
|
|
|
//
|
2003-10-20 22:19:47 +02:00
|
|
|
// The LLVM Compiler Infrastructure
|
|
|
|
//
|
2007-12-29 20:59:42 +01:00
|
|
|
// This file is distributed under the University of Illinois Open Source
|
|
|
|
// License. See LICENSE.TXT for details.
|
2005-04-21 22:19:05 +02:00
|
|
|
//
|
2003-10-20 22:19:47 +02:00
|
|
|
//===----------------------------------------------------------------------===//
|
2001-06-06 22:29:01 +02:00
|
|
|
//
|
2002-04-14 08:14:15 +02:00
|
|
|
// This file defines the function verifier interface, that can be used for some
|
2002-08-31 00:51:08 +02:00
|
|
|
// sanity checking of input to the system, and for checking that transformations
|
|
|
|
// haven't done something bad.
|
2001-06-06 22:29:01 +02:00
|
|
|
//
|
|
|
|
// 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_ANALYSIS_VERIFIER_H
|
|
|
|
#define LLVM_ANALYSIS_VERIFIER_H
|
|
|
|
|
2006-07-06 20:00:01 +02:00
|
|
|
#include <string>
|
|
|
|
|
2003-11-11 23:41:34 +01:00
|
|
|
namespace llvm {
|
|
|
|
|
2003-09-10 21:37:04 +02:00
|
|
|
class FunctionPass;
|
2001-06-06 22:29:01 +02:00
|
|
|
class Module;
|
2002-03-23 23:51:58 +01:00
|
|
|
class Function;
|
2001-06-06 22:29:01 +02:00
|
|
|
|
2004-04-02 17:44:33 +02:00
|
|
|
/// @brief An enumeration to specify the action to be taken if errors found.
|
2005-04-21 22:19:05 +02:00
|
|
|
///
|
2004-04-02 17:44:33 +02:00
|
|
|
/// 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.
|
2005-04-21 22:19:05 +02:00
|
|
|
enum VerifierFailureAction {
|
2004-04-02 17:44:33 +02:00
|
|
|
AbortProcessAction, ///< verifyModule will print to stderr and abort()
|
|
|
|
PrintMessageAction, ///< verifyModule will print to stderr and return true
|
2005-04-22 05:27:20 +02:00
|
|
|
ReturnStatusAction ///< verifyModule will just return true
|
2004-04-02 17:44:33 +02:00
|
|
|
};
|
2002-02-20 18:54:35 +01:00
|
|
|
|
2004-04-02 17:44:33 +02:00
|
|
|
/// @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.
|
2005-04-21 22:19:05 +02:00
|
|
|
FunctionPass *createVerifierPass(
|
2004-04-02 17:44:33 +02:00
|
|
|
VerifierFailureAction action = AbortProcessAction ///< Action to take
|
|
|
|
);
|
|
|
|
|
2005-04-21 22:19:05 +02:00
|
|
|
/// @brief Check a module for errors.
|
2004-04-02 17:44:33 +02:00
|
|
|
///
|
2005-04-21 22:19:05 +02:00
|
|
|
/// If there are no errors, the function returns false. If an error is found,
|
2004-04-02 17:44:33 +02:00
|
|
|
/// the action taken depends on the \p action parameter.
|
2005-04-21 22:19:05 +02:00
|
|
|
/// This should only be used for debugging, because it plays games with
|
2004-04-02 17:44:33 +02:00
|
|
|
/// PassManagers and stuff.
|
|
|
|
|
|
|
|
bool verifyModule(
|
|
|
|
const Module &M, ///< The module to be verified
|
2006-07-06 20:00:01 +02:00
|
|
|
VerifierFailureAction action = AbortProcessAction, ///< Action to take
|
|
|
|
std::string *ErrorInfo = 0 ///< Information about failures.
|
2004-04-02 17:44:33 +02:00
|
|
|
);
|
2002-02-26 22:38:48 +01:00
|
|
|
|
2002-04-14 08:14:15 +02:00
|
|
|
// verifyFunction - Check a function for errors, useful for use when debugging a
|
2002-02-26 22:38:48 +01:00
|
|
|
// pass.
|
2004-04-02 17:44:33 +02:00
|
|
|
bool verifyFunction(
|
|
|
|
const Function &F, ///< The function to be verified
|
|
|
|
VerifierFailureAction action = AbortProcessAction ///< Action to take
|
|
|
|
);
|
2001-06-06 22:29:01 +02:00
|
|
|
|
2003-11-11 23:41:34 +01:00
|
|
|
} // End llvm namespace
|
|
|
|
|
2001-06-06 22:29:01 +02:00
|
|
|
#endif
|