mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-21 03:32:21 +00:00
2073b0a63c
trees into the Support library. These are all expressed in terms of the generic GraphTraits and CFG, with no reliance on any concrete IR types. Putting them in support clarifies that and makes the fact that the static analyzer in Clang uses them much more sane. When moving the Dominators.h file into the IR library I claimed that this was the right home for it but not something I planned to work on. Oops. So why am I doing this? It happens to be one step toward breaking the requirement that IR verification can only be performed from inside of a pass context, which completely blocks the implementation of verification for the new pass manager infrastructure. Fixing it will also allow removing the concept of the "preverify" step (WTF???) and allow the verifier to cleanly flag functions which fail verification in a way that precludes even computing dominance information. Currently, that results in a fatal error even when you ask the verifier to not fatally error. It's awesome like that. The yak shaving will continue... git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199095 91177308-0d34-0410-b5e6-96231b3b80d8
70 lines
2.4 KiB
C++
70 lines
2.4 KiB
C++
//===- 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);
|
|
|
|
/// \brief Check a function for errors, useful for use when debugging a
|
|
/// pass.
|
|
bool verifyFunction(const Function &F,
|
|
VerifierFailureAction action = AbortProcessAction);
|
|
|
|
/// \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,
|
|
VerifierFailureAction action = AbortProcessAction,
|
|
std::string *ErrorInfo = 0);
|
|
|
|
} // End llvm namespace
|
|
|
|
#endif
|