diff options
author | Eugene Zelenko <eugene.zelenko@gmail.com> | 2018-02-28 01:10:04 +0000 |
---|---|---|
committer | Eugene Zelenko <eugene.zelenko@gmail.com> | 2018-02-28 01:10:04 +0000 |
commit | 5bc81eb9805acedf505ccebc5d8c9dc188baff65 (patch) | |
tree | 8ff9d764b098bf23f39a24d7b024880beebd8b9a /clang/lib/StaticAnalyzer/Core/Environment.cpp | |
parent | b911f1221126d7015e40919662da589658798ac1 (diff) | |
download | bcm5719-llvm-5bc81eb9805acedf505ccebc5d8c9dc188baff65.tar.gz bcm5719-llvm-5bc81eb9805acedf505ccebc5d8c9dc188baff65.zip |
[StaticAnalyzer] Fix some Clang-tidy modernize and Include What You Use warnings; other minor fixes (NFC).
llvm-svn: 326292
Diffstat (limited to 'clang/lib/StaticAnalyzer/Core/Environment.cpp')
-rw-r--r-- | clang/lib/StaticAnalyzer/Core/Environment.cpp | 42 |
1 files changed, 29 insertions, 13 deletions
diff --git a/clang/lib/StaticAnalyzer/Core/Environment.cpp b/clang/lib/StaticAnalyzer/Core/Environment.cpp index 0edc890ca90..67b37a3bc45 100644 --- a/clang/lib/StaticAnalyzer/Core/Environment.cpp +++ b/clang/lib/StaticAnalyzer/Core/Environment.cpp @@ -1,4 +1,4 @@ -//== Environment.cpp - Map from Stmt* to Locations/Values -------*- C++ -*--==// +//===- Environment.cpp - Map from Stmt* to Locations/Values ---------------===// // // The LLVM Compiler Infrastructure // @@ -11,12 +11,25 @@ // //===----------------------------------------------------------------------===// +#include "clang/StaticAnalyzer/Core/PathSensitive/Environment.h" +#include "clang/AST/Expr.h" #include "clang/AST/ExprCXX.h" -#include "clang/AST/ExprObjC.h" +#include "clang/AST/PrettyPrinter.h" +#include "clang/AST/Stmt.h" #include "clang/Analysis/AnalysisDeclContext.h" -#include "clang/Analysis/CFG.h" +#include "clang/Basic/LLVM.h" +#include "clang/Basic/LangOptions.h" #include "clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h" +#include "clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h" +#include "clang/StaticAnalyzer/Core/PathSensitive/SVals.h" +#include "clang/StaticAnalyzer/Core/PathSensitive/SymExpr.h" +#include "clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h" +#include "llvm/ADT/ImmutableMap.h" +#include "llvm/ADT/SmallPtrSet.h" +#include "llvm/Support/Casting.h" +#include "llvm/Support/ErrorHandling.h" #include "llvm/Support/raw_ostream.h" +#include <cassert> using namespace clang; using namespace ento; @@ -46,16 +59,16 @@ static const Expr *ignoreTransparentExprs(const Expr *E) { } static const Stmt *ignoreTransparentExprs(const Stmt *S) { - if (const Expr *E = dyn_cast<Expr>(S)) + if (const auto *E = dyn_cast<Expr>(S)) return ignoreTransparentExprs(E); return S; } EnvironmentEntry::EnvironmentEntry(const Stmt *S, const LocationContext *L) - : std::pair<const Stmt *, - const StackFrameContext *>(ignoreTransparentExprs(S), - L ? L->getCurrentStackFrame() - : nullptr) {} + : std::pair<const Stmt *, + const StackFrameContext *>(ignoreTransparentExprs(S), + L ? L->getCurrentStackFrame() + : nullptr) {} SVal Environment::lookupExpr(const EnvironmentEntry &E) const { const SVal* X = ExprBindings.lookup(E); @@ -95,7 +108,7 @@ SVal Environment::getSVal(const EnvironmentEntry &Entry, return svalBuilder.getConstantVal(cast<Expr>(S)).getValue(); case Stmt::ReturnStmtClass: { - const ReturnStmt *RS = cast<ReturnStmt>(S); + const auto *RS = cast<ReturnStmt>(S); if (const Expr *RE = RS->getRetValue()) return getSVal(EnvironmentEntry(RE, LCtx), svalBuilder); return UndefinedVal(); @@ -121,20 +134,25 @@ Environment EnvironmentManager::bindExpr(Environment Env, } namespace { + class MarkLiveCallback final : public SymbolVisitor { SymbolReaper &SymReaper; + public: MarkLiveCallback(SymbolReaper &symreaper) : SymReaper(symreaper) {} + bool VisitSymbol(SymbolRef sym) override { SymReaper.markLive(sym); return true; } + bool VisitMemRegion(const MemRegion *R) override { SymReaper.markLive(R); return true; } }; -} // end anonymous namespace + +} // namespace // removeDeadBindings: // - Remove subexpression bindings. @@ -147,7 +165,6 @@ Environment EnvironmentManager::removeDeadBindings(Environment Env, SymbolReaper &SymReaper, ProgramStateRef ST) { - // We construct a new Environment object entirely, as this is cheaper than // individually removing all the subexpression bindings (which will greatly // outnumber block-level expression bindings). @@ -156,14 +173,13 @@ EnvironmentManager::removeDeadBindings(Environment Env, MarkLiveCallback CB(SymReaper); ScanReachableSymbols RSScaner(ST, CB); - llvm::ImmutableMapRef<EnvironmentEntry,SVal> + llvm::ImmutableMapRef<EnvironmentEntry, SVal> EBMapRef(NewEnv.ExprBindings.getRootWithoutRetain(), F.getTreeFactory()); // Iterate over the block-expr bindings. for (Environment::iterator I = Env.begin(), E = Env.end(); I != E; ++I) { - const EnvironmentEntry &BlkExpr = I.getKey(); const SVal &X = I.getData(); |