[PATCH] D71224: [analyzer] Escape symbols stored into specific region after a conservative evalcall.
Artem Dergachev via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Dec 10 17:14:16 PST 2019
NoQ accepted this revision.
NoQ added a comment.
This revision is now accepted and ready to land.
Thanks!! Nothing controversial remains here, right? :)
================
Comment at: clang/include/clang/StaticAnalyzer/Core/CheckerManager.h:91
+ /// that the analyzer cannot follow during a conservative call.
+ PSK_EscapeOnConservativeCall,
+
----------------
All three escape-on-calls are on conservatively evaluated calls only, so this name isn't very descriptive.
Maybe `PSK_EscapeOutParameters`?
================
Comment at: clang/lib/StaticAnalyzer/Core/ExprEngine.cpp:2736
SVal Val, const LocationContext *LCtx) {
-
- // Cases (1) and (2).
- const MemRegion *MR = Loc.getAsRegion();
- if (!MR || !MR->hasStackStorage())
- return escapeValue(State, Val, PSK_EscapeOnBind);
-
- // Case (3).
- if (const auto *VR = dyn_cast<VarRegion>(MR->getBaseRegion()))
- if (VR->hasStackParametersStorage() && VR->getStackFrame()->inTopFrame())
- if (const auto *RD = VR->getValueType()->getAsCXXRecordDecl())
- if (!RD->hasTrivialDestructor())
- return escapeValue(State, Val, PSK_EscapeOnBind);
-
- // Case (4): in order to test that, generate a new state with the binding
- // added. If it is the same state, then it escapes (since the store cannot
- // represent the binding).
- // Do this only if we know that the store is not supposed to generate the
- // same state.
- SVal StoredVal = State->getSVal(MR);
- if (StoredVal != Val)
- if (State == (State->bindLoc(loc::MemRegionVal(MR), Val, LCtx)))
- return escapeValue(State, Val, PSK_EscapeOnBind);
-
- return State;
+ std::pair<SVal, SVal> LocAndVal(Loc, Val);
+ return processPointerEscapedOnBind(State, LocAndVal, LCtx, PSK_EscapeOnBind,
----------------
Dunno, `make_pair`?
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D71224/new/
https://reviews.llvm.org/D71224
More information about the cfe-commits
mailing list