LoopWidening.h revision 292920
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
22namespace clang {
23namespace 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.
29ProgramStateRef 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