//===--- LoopWidening.cpp - Widen loops -------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// /// /// This file contains functions which are used to widen loops. A loop may be /// widened to approximate the exit state(s), without analyzing every /// iteration. The widening is done by invalidating anything which might be /// modified by the body of the loop. /// //===----------------------------------------------------------------------===// #include "clang/AST/AST.h" #include "clang/ASTMatchers/ASTMatchFinder.h" #include "clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h" #include "clang/StaticAnalyzer/Core/PathSensitive/LoopWidening.h" usingnamespaceclang; usingnamespaceento; usingnamespaceclang::ast_matchers; const auto MatchRef = …; /// Return the loops condition Stmt or NULL if LoopStmt is not a loop static const Expr *getLoopCondition(const Stmt *LoopStmt) { … } namespace clang { namespace ento { ProgramStateRef getWidenedLoopState(ProgramStateRef PrevState, const LocationContext *LCtx, unsigned BlockCount, const Stmt *LoopStmt) { … } } // end namespace ento } // end namespace clang