summaryrefslogtreecommitdiffstats
path: root/clang/lib/StaticAnalyzer/Core
diff options
context:
space:
mode:
authorGabor Horvath <xazax@google.com>2019-12-10 16:42:03 -0800
committerGabor Horvath <xazax@google.com>2019-12-10 16:42:03 -0800
commit8434fbbee62e382376a39787785909bd55ae1696 (patch)
treeb04bcd5798cd15da5ba8a9fa80fd9edb84c7c0fc /clang/lib/StaticAnalyzer/Core
parent21bc8631fe934126a19ddc9cfd08b20798c5043d (diff)
downloadbcm5719-llvm-8434fbbee62e382376a39787785909bd55ae1696.tar.gz
bcm5719-llvm-8434fbbee62e382376a39787785909bd55ae1696.zip
Revert "[analyzer] Keep track of escaped locals"
It was a step in the right direction but it is not clear how can this fit into the checker API at this point. The pre-escape happens in the analyzer core and the checker has no control over it. If the checker is not interestd in a pre-escape it would need to do additional work on each escape to check if the escaped symbol is originated from an "uninteresting" pre-escaped memory region. In order to keep the checker API simple we abandoned this solution for now. We will reland this once we have a better answer for what to do on the checker side. This reverts commit f3a28202ef58551db15818f8f51afd21e0f3e231.
Diffstat (limited to 'clang/lib/StaticAnalyzer/Core')
-rw-r--r--clang/lib/StaticAnalyzer/Core/ExprEngine.cpp18
-rw-r--r--clang/lib/StaticAnalyzer/Core/ProgramState.cpp10
2 files changed, 3 insertions, 25 deletions
diff --git a/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp b/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp
index b6f6481c369..efbc20f0925 100644
--- a/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp
+++ b/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp
@@ -193,8 +193,6 @@ typedef llvm::ImmutableMap<ConstructedObjectKey, SVal>
REGISTER_TRAIT_WITH_PROGRAMSTATE(ObjectsUnderConstruction,
ObjectsUnderConstructionMap)
-REGISTER_SET_WITH_PROGRAMSTATE(EscapedLocals, const MemRegion *)
-
//===----------------------------------------------------------------------===//
// Engine construction and deletion.
//===----------------------------------------------------------------------===//
@@ -725,12 +723,6 @@ void ExprEngine::removeDead(ExplodedNode *Pred, ExplodedNodeSet &Out,
SymReaper.markLive(MR);
}
- EscapedLocalsTy EscapedRegions = CleanedState->get<EscapedLocals>();
- for (const MemRegion *MR : EscapedRegions) {
- if (!SymReaper.isLiveRegion(MR))
- CleanedState = CleanedState->remove<EscapedLocals>(MR);
- }
-
getCheckerManager().runCheckersForLiveSymbols(CleanedState, SymReaper);
// Create a state in which dead bindings are removed from the environment
@@ -1202,11 +1194,6 @@ ProgramStateRef ExprEngine::escapeValue(ProgramStateRef State, SVal V,
State, Scanner.getSymbols(), /*CallEvent*/ nullptr, K, nullptr);
}
-ProgramStateRef ExprEngine::processLocalRegionEscape(ProgramStateRef State,
- const MemRegion *R) const {
- return State->add<EscapedLocals>(R);
-}
-
void ExprEngine::Visit(const Stmt *S, ExplodedNode *Pred,
ExplodedNodeSet &DstTop) {
PrettyStackTraceLoc CrashInfo(getContext().getSourceManager(),
@@ -2693,8 +2680,7 @@ void ExprEngine::VisitAtomicExpr(const AtomicExpr *AE, ExplodedNode *Pred,
// A value escapes in four possible cases:
// (1) We are binding to something that is not a memory region.
-// (2) We are binding to a MemRegion that does not have stack storage
-// or the stack storage is escaped.
+// (2) We are binding to a MemRegion that does not have stack storage.
// (3) We are binding to a top-level parameter region with a non-trivial
// destructor. We won't see the destructor during analysis, but it's there.
// (4) We are binding to a MemRegion with stack storage that the store
@@ -2705,7 +2691,7 @@ ExprEngine::processPointerEscapedOnBind(ProgramStateRef State, SVal Loc,
// Cases (1) and (2).
const MemRegion *MR = Loc.getAsRegion();
- if (!MR || !MR->hasStackStorage() || State->contains<EscapedLocals>(MR))
+ if (!MR || !MR->hasStackStorage())
return escapeValue(State, Val, PSK_EscapeOnBind);
// Case (3).
diff --git a/clang/lib/StaticAnalyzer/Core/ProgramState.cpp b/clang/lib/StaticAnalyzer/Core/ProgramState.cpp
index 35c10a7624e..14006f79fd0 100644
--- a/clang/lib/StaticAnalyzer/Core/ProgramState.cpp
+++ b/clang/lib/StaticAnalyzer/Core/ProgramState.cpp
@@ -41,8 +41,7 @@ void ProgramStateRelease(const ProgramState *state) {
Mgr.freeStates.push_back(s);
}
}
-} // namespace ento
-} // namespace clang
+}}
ProgramState::ProgramState(ProgramStateManager *mgr, const Environment& env,
StoreRef st, GenericDataMap gdm)
@@ -210,13 +209,6 @@ ProgramState::invalidateRegionsImpl(ValueList Values,
ProgramStateRef newState = makeWithStore(newStore);
if (CausedByPointerEscape) {
- for (const MemRegion *R : Invalidated) {
- if (!R->hasStackStorage())
- continue;
-
- newState = Eng.processLocalRegionEscape(newState, R->getBaseRegion());
- }
-
newState = Eng.notifyCheckersOfPointerEscape(newState, IS,
TopLevelInvalidated,
Call,
OpenPOWER on IntegriCloud