Skip to content

Commit de88ff7

Browse files
committed
Convert more references
1 parent 97c4e0e commit de88ff7

File tree

3 files changed

+53
-42
lines changed

3 files changed

+53
-42
lines changed

clang/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,11 @@ class CheckerContext {
151151
return Pred->getSVal(S);
152152
}
153153

154+
/// Get the CFG Element Ref from the ExprEngine
155+
CFGBlock::ConstCFGElementRef getCFGElementRef() const {
156+
return Eng.getCFGElementRef();
157+
}
158+
154159
/// Returns true if the value of \p E is greater than or equal to \p
155160
/// Val under unsigned comparison
156161
bool isGreaterOrEqual(const Expr *E, unsigned long long Val);

clang/lib/StaticAnalyzer/Checkers/ContainerModeling.cpp

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -107,13 +107,13 @@ bool frontModifiable(ProgramStateRef State, const MemRegion *Reg);
107107
bool backModifiable(ProgramStateRef State, const MemRegion *Reg);
108108
SymbolRef getContainerBegin(ProgramStateRef State, const MemRegion *Cont);
109109
SymbolRef getContainerEnd(ProgramStateRef State, const MemRegion *Cont);
110-
ProgramStateRef createContainerBegin(ProgramStateRef State,
110+
ProgramStateRef createContainerBegin(CheckerContext &C, ProgramStateRef State,
111111
const MemRegion *Cont, const Expr *E,
112112
QualType T, const LocationContext *LCtx,
113113
unsigned BlockCount);
114-
ProgramStateRef createContainerEnd(ProgramStateRef State, const MemRegion *Cont,
115-
const Expr *E, QualType T,
116-
const LocationContext *LCtx,
114+
ProgramStateRef createContainerEnd(CheckerContext &C, ProgramStateRef State,
115+
const MemRegion *Cont, const Expr *E,
116+
QualType T, const LocationContext *LCtx,
117117
unsigned BlockCount);
118118
ProgramStateRef setContainerData(ProgramStateRef State, const MemRegion *Cont,
119119
const ContainerData &CData);
@@ -260,8 +260,9 @@ void ContainerModeling::handleBegin(CheckerContext &C, const Expr *CE,
260260
auto State = C.getState();
261261
auto BeginSym = getContainerBegin(State, ContReg);
262262
if (!BeginSym) {
263-
State = createContainerBegin(State, ContReg, CE, C.getASTContext().LongTy,
264-
C.getLocationContext(), C.blockCount());
263+
State =
264+
createContainerBegin(C, State, ContReg, CE, C.getASTContext().LongTy,
265+
C.getLocationContext(), C.blockCount());
265266
BeginSym = getContainerBegin(State, ContReg);
266267
}
267268
State = setIteratorPosition(State, RetVal,
@@ -282,7 +283,7 @@ void ContainerModeling::handleEnd(CheckerContext &C, const Expr *CE,
282283
auto State = C.getState();
283284
auto EndSym = getContainerEnd(State, ContReg);
284285
if (!EndSym) {
285-
State = createContainerEnd(State, ContReg, CE, C.getASTContext().LongTy,
286+
State = createContainerEnd(C, State, ContReg, CE, C.getASTContext().LongTy,
286287
C.getLocationContext(), C.blockCount());
287288
EndSym = getContainerEnd(State, ContReg);
288289
}
@@ -326,7 +327,7 @@ void ContainerModeling::handleAssignment(CheckerContext &C, SVal Cont,
326327
auto &SVB = C.getSValBuilder();
327328
// Then generate and assign a new "end" symbol for the new container.
328329
auto NewEndSym =
329-
SymMgr.conjureSymbol(CE, C.getLocationContext(),
330+
SymMgr.conjureSymbol(C.getCFGElementRef(), C.getLocationContext(),
330331
C.getASTContext().LongTy, C.blockCount());
331332
State = assumeNoOverflow(State, NewEndSym, 4);
332333
if (CData) {
@@ -844,7 +845,7 @@ SymbolRef getContainerEnd(ProgramStateRef State, const MemRegion *Cont) {
844845
return CDataPtr->getEnd();
845846
}
846847

847-
ProgramStateRef createContainerBegin(ProgramStateRef State,
848+
ProgramStateRef createContainerBegin(CheckerContext &C, ProgramStateRef State,
848849
const MemRegion *Cont, const Expr *E,
849850
QualType T, const LocationContext *LCtx,
850851
unsigned BlockCount) {
@@ -854,8 +855,8 @@ ProgramStateRef createContainerBegin(ProgramStateRef State,
854855
return State;
855856

856857
auto &SymMgr = State->getSymbolManager();
857-
const SymbolConjured *Sym = SymMgr.conjureSymbol(E, LCtx, T, BlockCount,
858-
"begin");
858+
const SymbolConjured *Sym =
859+
SymMgr.conjureSymbol(C.getCFGElementRef(), LCtx, T, BlockCount, "begin");
859860
State = assumeNoOverflow(State, Sym, 4);
860861

861862
if (CDataPtr) {
@@ -867,18 +868,18 @@ ProgramStateRef createContainerBegin(ProgramStateRef State,
867868
return setContainerData(State, Cont, CData);
868869
}
869870

870-
ProgramStateRef createContainerEnd(ProgramStateRef State, const MemRegion *Cont,
871-
const Expr *E, QualType T,
872-
const LocationContext *LCtx,
871+
ProgramStateRef createContainerEnd(CheckerContext &C, ProgramStateRef State,
872+
const MemRegion *Cont, const Expr *E,
873+
QualType T, const LocationContext *LCtx,
873874
unsigned BlockCount) {
874875
// Only create if it does not exist
875876
const auto *CDataPtr = getContainerData(State, Cont);
876877
if (CDataPtr && CDataPtr->getEnd())
877878
return State;
878879

879880
auto &SymMgr = State->getSymbolManager();
880-
const SymbolConjured *Sym = SymMgr.conjureSymbol(E, LCtx, T, BlockCount,
881-
"end");
881+
const SymbolConjured *Sym =
882+
SymMgr.conjureSymbol(C.getCFGElementRef(), LCtx, T, BlockCount, "end");
882883
State = assumeNoOverflow(State, Sym, 4);
883884

884885
if (CDataPtr) {

clang/lib/StaticAnalyzer/Core/RegionStore.cpp

Lines changed: 31 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "clang/ASTMatchers/ASTMatchFinder.h"
2020
#include "clang/Analysis/Analyses/LiveVariables.h"
2121
#include "clang/Analysis/AnalysisDeclContext.h"
22+
#include "clang/Analysis/CFG.h"
2223
#include "clang/Basic/JsonSupport.h"
2324
#include "clang/Basic/TargetInfo.h"
2425
#include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h"
@@ -473,11 +474,11 @@ class RegionStoreManager : public StoreManager {
473474
//===-------------------------------------------------------------------===//
474475
// Binding values to regions.
475476
//===-------------------------------------------------------------------===//
476-
RegionBindingsRef invalidateGlobalRegion(MemRegion::Kind K, const Stmt *S,
477-
unsigned Count,
478-
const LocationContext *LCtx,
479-
RegionBindingsRef B,
480-
InvalidatedRegions *Invalidated);
477+
RegionBindingsRef
478+
invalidateGlobalRegion(MemRegion::Kind K,
479+
const CFGBlock::ConstCFGElementRef elemRef,
480+
unsigned Count, const LocationContext *LCtx,
481+
RegionBindingsRef B, InvalidatedRegions *Invalidated);
481482

482483
StoreRef invalidateRegions(Store store, ArrayRef<SVal> Values, const Stmt *S,
483484
unsigned Count, const LocationContext *LCtx,
@@ -1044,7 +1045,7 @@ RegionStoreManager::removeSubRegionBindings(RegionBindingsConstRef B,
10441045
namespace {
10451046
class InvalidateRegionsWorker : public ClusterAnalysis<InvalidateRegionsWorker>
10461047
{
1047-
const Stmt *S;
1048+
const CFGBlock::ConstCFGElementRef ElemRef;
10481049
unsigned Count;
10491050
const LocationContext *LCtx;
10501051
InvalidatedSymbols &IS;
@@ -1053,14 +1054,16 @@ class InvalidateRegionsWorker : public ClusterAnalysis<InvalidateRegionsWorker>
10531054
GlobalsFilterKind GlobalsFilter;
10541055
public:
10551056
InvalidateRegionsWorker(RegionStoreManager &rm, ProgramStateManager &stateMgr,
1056-
RegionBindingsRef b, const Stmt *S, unsigned count,
1057-
const LocationContext *lctx, InvalidatedSymbols &is,
1057+
RegionBindingsRef b,
1058+
const CFGBlock::ConstCFGElementRef elemRef,
1059+
unsigned count, const LocationContext *lctx,
1060+
InvalidatedSymbols &is,
10581061
RegionAndSymbolInvalidationTraits &ITraitsIn,
10591062
StoreManager::InvalidatedRegions *r,
10601063
GlobalsFilterKind GFK)
1061-
: ClusterAnalysis<InvalidateRegionsWorker>(rm, stateMgr, b), S(S),
1062-
Count(count), LCtx(lctx), IS(is), ITraits(ITraitsIn), Regions(r),
1063-
GlobalsFilter(GFK) {}
1064+
: ClusterAnalysis<InvalidateRegionsWorker>(rm, stateMgr, b),
1065+
ElemRef(elemRef), Count(count), LCtx(lctx), IS(is), ITraits(ITraitsIn),
1066+
Regions(r), GlobalsFilter(GFK) {}
10641067

10651068
void VisitCluster(const MemRegion *baseR, const ClusterBindings *C);
10661069
void VisitBinding(SVal V);
@@ -1193,7 +1196,7 @@ void InvalidateRegionsWorker::VisitCluster(const MemRegion *baseR,
11931196
// Invalidate the region by setting its default value to
11941197
// conjured symbol. The type of the symbol is irrelevant.
11951198
DefinedOrUnknownSVal V =
1196-
svalBuilder.conjureSymbolVal(baseR, S, LCtx, Ctx.IntTy, Count);
1199+
svalBuilder.conjureSymbolVal(baseR, ElemRef, LCtx, Ctx.IntTy, Count);
11971200
B = B.addBinding(baseR, BindingKey::Default, V);
11981201
return;
11991202
}
@@ -1215,7 +1218,7 @@ void InvalidateRegionsWorker::VisitCluster(const MemRegion *baseR,
12151218
// Invalidate the region by setting its default value to
12161219
// conjured symbol. The type of the symbol is irrelevant.
12171220
DefinedOrUnknownSVal V =
1218-
svalBuilder.conjureSymbolVal(baseR, S, LCtx, Ctx.IntTy, Count);
1221+
svalBuilder.conjureSymbolVal(baseR, ElemRef, LCtx, Ctx.IntTy, Count);
12191222
B = B.addBinding(baseR, BindingKey::Default, V);
12201223
return;
12211224
}
@@ -1283,13 +1286,13 @@ void InvalidateRegionsWorker::VisitCluster(const MemRegion *baseR,
12831286
conjure_default:
12841287
// Set the default value of the array to conjured symbol.
12851288
DefinedOrUnknownSVal V = svalBuilder.conjureSymbolVal(
1286-
baseR, S, LCtx, AT->getElementType(), Count);
1289+
baseR, ElemRef, LCtx, AT->getElementType(), Count);
12871290
B = B.addBinding(baseR, BindingKey::Default, V);
12881291
return;
12891292
}
12901293

12911294
DefinedOrUnknownSVal V =
1292-
svalBuilder.conjureSymbolVal(baseR, S, LCtx, T, Count);
1295+
svalBuilder.conjureSymbolVal(baseR, ElemRef, LCtx, T, Count);
12931296
assert(SymbolManager::canSymbolicate(T) || V.isUnknown());
12941297
B = B.addBinding(baseR, BindingKey::Direct, V);
12951298
}
@@ -1318,15 +1321,15 @@ bool InvalidateRegionsWorker::includeEntireMemorySpace(const MemRegion *Base) {
13181321
}
13191322

13201323
RegionBindingsRef RegionStoreManager::invalidateGlobalRegion(
1321-
MemRegion::Kind K, const Stmt *S, unsigned Count,
1322-
const LocationContext *LCtx, RegionBindingsRef B,
1324+
MemRegion::Kind K, const CFGBlock::ConstCFGElementRef elemRef,
1325+
unsigned Count, const LocationContext *LCtx, RegionBindingsRef B,
13231326
InvalidatedRegions *Invalidated) {
13241327
// Bind the globals memory space to a new symbol that we will use to derive
13251328
// the bindings for all globals.
13261329
const GlobalsSpaceRegion *GS = MRMgr.getGlobalsRegion(K);
1327-
SVal V =
1328-
svalBuilder.conjureSymbolVal(/* symbolTag = */ (const void *)GS, S, LCtx,
1329-
/* type does not matter */ Ctx.IntTy, Count);
1330+
SVal V = svalBuilder.conjureSymbolVal(
1331+
/* symbolTag = */ (const void *)GS, elemRef, LCtx,
1332+
/* type does not matter */ Ctx.IntTy, Count);
13301333

13311334
B = B.removeBinding(GS)
13321335
.addBinding(BindingKey::Make(GS, BindingKey::Default), V);
@@ -1376,8 +1379,8 @@ StoreRef RegionStoreManager::invalidateRegions(
13761379
}
13771380

13781381
RegionBindingsRef B = getRegionBindings(store);
1379-
InvalidateRegionsWorker W(*this, StateMgr, B, S, Count, LCtx, IS, ITraits,
1380-
Invalidated, GlobalsFilter);
1382+
InvalidateRegionsWorker W(*this, StateMgr, B, Call->getCFGElementRef(), Count,
1383+
LCtx, IS, ITraits, Invalidated, GlobalsFilter);
13811384

13821385
// Scan the bindings and generate the clusters.
13831386
W.GenerateClusters();
@@ -1396,12 +1399,14 @@ StoreRef RegionStoreManager::invalidateRegions(
13961399
// TODO: This could possibly be more precise with modules.
13971400
switch (GlobalsFilter) {
13981401
case GFK_All:
1399-
B = invalidateGlobalRegion(MemRegion::GlobalInternalSpaceRegionKind, S,
1400-
Count, LCtx, B, Invalidated);
1402+
B = invalidateGlobalRegion(MemRegion::GlobalInternalSpaceRegionKind,
1403+
Call->getCFGElementRef(), Count, LCtx, B,
1404+
Invalidated);
14011405
[[fallthrough]];
14021406
case GFK_SystemOnly:
1403-
B = invalidateGlobalRegion(MemRegion::GlobalSystemSpaceRegionKind, S, Count,
1404-
LCtx, B, Invalidated);
1407+
B = invalidateGlobalRegion(MemRegion::GlobalSystemSpaceRegionKind,
1408+
Call->getCFGElementRef(), Count, LCtx, B,
1409+
Invalidated);
14051410
[[fallthrough]];
14061411
case GFK_None:
14071412
break;

0 commit comments

Comments
 (0)