Home | History | Annotate | Download | only in PathSensitive
      1 //===--- LoopWidening.h - Widen loops ---------------------------*- 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 header contains the declarations of functions which are used to widen
     11 /// loops which do not otherwise exit. The widening is done by invalidating
     12 /// anything which might be modified by the body of the loop.
     13 ///
     14 //===----------------------------------------------------------------------===//
     15 
     16 #ifndef LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_LOOPWIDENING_H
     17 #define LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_LOOPWIDENING_H
     18 
     19 #include "clang/Analysis/CFG.h"
     20 #include "clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h"
     21 
     22 namespace clang {
     23 namespace ento {
     24 
     25 /// \brief Get the states that result from widening the loop.
     26 ///
     27 /// Widen the loop by invalidating anything that might be modified
     28 /// by the loop body in any iteration.
     29 ProgramStateRef getWidenedLoopState(ProgramStateRef PrevState,
     30                                     const LocationContext *LCtx,
     31                                     unsigned BlockCount, const Stmt *LoopStmt);
     32 
     33 } // end namespace ento
     34 } // end namespace clang
     35 
     36 #endif
     37