Home | History | Annotate | Download | only in Analysis
      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