diff options
author | Jordan Rose <jordan_rose@apple.com> | 2012-12-06 18:58:01 +0000 |
---|---|---|
committer | Jordan Rose <jordan_rose@apple.com> | 2012-12-06 18:58:01 +0000 |
commit | 7affe151f5689b2d3547b8947c4099532c78a021 (patch) | |
tree | 8c3c7e834505ad262ada467546823335c8d3cbb2 /lib/StaticAnalyzer/Core/Environment.cpp | |
parent | 15757316d67cb7a854d53a0402d67ad58347600a (diff) |
[analyzer] Remove bindExprAndLocation, which does extra work for no gain.
This feature was probably intended to improve diagnostics, but was currently
only used when dumping the Environment. It shows what location a given value
was loaded from, e.g. when evaluating an LValueToRValue cast.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@169522 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/StaticAnalyzer/Core/Environment.cpp')
-rw-r--r-- | lib/StaticAnalyzer/Core/Environment.cpp | 63 |
1 files changed, 1 insertions, 62 deletions
diff --git a/lib/StaticAnalyzer/Core/Environment.cpp b/lib/StaticAnalyzer/Core/Environment.cpp index 60655435a0..b6c44bf5d6 100644 --- a/lib/StaticAnalyzer/Core/Environment.cpp +++ b/lib/StaticAnalyzer/Core/Environment.cpp @@ -150,19 +150,6 @@ Environment EnvironmentManager::bindExpr(Environment Env, return Environment(F.add(Env.ExprBindings, E, V)); } -EnvironmentEntry EnvironmentEntry::makeLocation() const { - EnvironmentEntry Result = *this; - reinterpret_cast<uintptr_t &>(Result.first) |= 0x1; - return Result; -} - -Environment EnvironmentManager::bindExprAndLocation(Environment Env, - const EnvironmentEntry &E, - SVal location, SVal V) { - return Environment(F.add(F.add(Env.ExprBindings, E.makeLocation(), location), - E, V)); -} - namespace { class MarkLiveCallback : public SymbolVisitor { SymbolReaper &SymReaper; @@ -179,14 +166,6 @@ public: }; } // end anonymous namespace -// In addition to mapping from EnvironmentEntry - > SVals in the Environment, -// we also maintain a mapping from EnvironmentEntry -> SVals (locations) -// that were used during a load and store. -static inline bool IsLocation(const EnvironmentEntry &E) { - const Stmt *S = E.getStmt(); - return (bool) (((uintptr_t) S) & 0x1); -} - // removeDeadBindings: // - Remove subexpression bindings. // - Remove dead block expression bindings. @@ -203,8 +182,6 @@ EnvironmentManager::removeDeadBindings(Environment Env, // individually removing all the subexpression bindings (which will greatly // outnumber block-level expression bindings). Environment NewEnv = getInitialEnvironment(); - - SmallVector<std::pair<EnvironmentEntry, SVal>, 10> deferredLocations; MarkLiveCallback CB(SymReaper); ScanReachableSymbols RSScaner(ST, CB); @@ -218,15 +195,6 @@ EnvironmentManager::removeDeadBindings(Environment Env, I != E; ++I) { const EnvironmentEntry &BlkExpr = I.getKey(); - // For recorded locations (used when evaluating loads and stores), we - // consider them live only when their associated normal expression is - // also live. - // NOTE: This assumes that loads/stores that evaluated to UnknownVal - // still have an entry in the map. - if (IsLocation(BlkExpr)) { - deferredLocations.push_back(std::make_pair(BlkExpr, I.getData())); - continue; - } const SVal &X = I.getData(); if (SymReaper.isLive(BlkExpr.getStmt(), BlkExpr.getLocationContext())) { @@ -248,16 +216,6 @@ EnvironmentManager::removeDeadBindings(Environment Env, SymReaper.maybeDead(*SI); } } - - // Go through he deferred locations and add them to the new environment if - // the correspond Stmt* is in the map as well. - for (SmallVectorImpl<std::pair<EnvironmentEntry, SVal> >::iterator - I = deferredLocations.begin(), E = deferredLocations.end(); I != E; ++I) { - const EnvironmentEntry &En = I->first; - const Stmt *S = (Stmt*) (((uintptr_t) En.getStmt()) & (uintptr_t) ~0x1); - if (EBMapRef.lookup(EnvironmentEntry(S, En.getLocationContext()))) - EBMapRef = EBMapRef.add(En, I->second); - } NewEnv.ExprBindings = EBMapRef.asImmutableMap(); return NewEnv; @@ -265,30 +223,14 @@ EnvironmentManager::removeDeadBindings(Environment Env, void Environment::print(raw_ostream &Out, const char *NL, const char *Sep) const { - printAux(Out, false, NL, Sep); - printAux(Out, true, NL, Sep); -} - -void Environment::printAux(raw_ostream &Out, bool printLocations, - const char *NL, - const char *Sep) const{ - bool isFirst = true; for (Environment::iterator I = begin(), E = end(); I != E; ++I) { const EnvironmentEntry &En = I.getKey(); - if (IsLocation(En)) { - if (!printLocations) - continue; - } - else { - if (printLocations) - continue; - } if (isFirst) { Out << NL << NL - << (printLocations ? "Load/Store locations:" : "Expressions:") + << "Expressions:" << NL; isFirst = false; } else { @@ -296,9 +238,6 @@ void Environment::printAux(raw_ostream &Out, bool printLocations, } const Stmt *S = En.getStmt(); - if (printLocations) { - S = (Stmt*) (((uintptr_t) S) & ((uintptr_t) ~0x1)); - } Out << " (" << (const void*) En.getLocationContext() << ',' << (const void*) S << ") "; |