LoopWidening.h revision 292942
189051Sjake//===--- LoopWidening.h - Widen loops ---------------------------*- C++ -*-===//
289051Sjake//
389051Sjake//                     The LLVM Compiler Infrastructure
489051Sjake//
589051Sjake// This file is distributed under the University of Illinois Open Source
689051Sjake// License. See LICENSE.TXT for details.
789051Sjake//
889051Sjake//===----------------------------------------------------------------------===//
989051Sjake///
1089051Sjake/// This header contains the declarations of functions which are used to widen
1189051Sjake/// loops which do not otherwise exit. The widening is done by invalidating
1289051Sjake/// anything which might be modified by the body of the loop.
1389051Sjake///
1489051Sjake//===----------------------------------------------------------------------===//
1589051Sjake
1689051Sjake#ifndef LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_LOOPWIDENING_H
1789051Sjake#define LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_LOOPWIDENING_H
1889051Sjake
1989051Sjake#include "clang/Analysis/CFG.h"
2089051Sjake#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h"
2189051Sjake
2289051Sjakenamespace clang {
2389051Sjakenamespace ento {
2489051Sjake
2589051Sjake/// \brief Get the states that result from widening the loop.
2689051Sjake///
27114188Sjake/// Widen the loop by invalidating anything that might be modified
28114188Sjake/// by the loop body in any iteration.
29114188SjakeProgramStateRef getWidenedLoopState(ProgramStateRef PrevState,
3089051Sjake                                    const LocationContext *LCtx,
31166105Smarius                                    unsigned BlockCount, const Stmt *LoopStmt);
32166105Smarius
3389051Sjake} // end namespace ento
3489051Sjake} // end namespace clang
3589051Sjake
3689051Sjake#endif
3789051Sjake