[clang] [StaticAnalyzer] Fix state update in VisitObjCForCollectionStmt (PR #124477)
DonĂ¡t Nagy via cfe-commits
cfe-commits at lists.llvm.org
Fri Jan 31 05:41:27 PST 2025
================
@@ -124,24 +124,26 @@ void ExprEngine::VisitObjCForCollectionStmt(const ObjCForCollectionStmt *S,
bool isContainerNull = state->isNull(collectionV).isConstrainedTrue();
- ExplodedNodeSet dstLocation;
- evalLocation(dstLocation, S, elem, Pred, state, elementV, false);
+ ExplodedNodeSet NewPreds; // evalLocation may alter `Pred`
+ evalLocation(NewPreds, S, elem, Pred, state, elementV, false);
- ExplodedNodeSet Tmp;
- StmtNodeBuilder Bldr(Pred, Tmp, *currBldrCtx);
+ for (ExplodedNode *Pred : NewPreds) {
+ ExplodedNodeSet PredSingleton{Pred}, Tmp;
+ StmtNodeBuilder Bldr(Pred, Tmp, *currBldrCtx);
- if (!isContainerNull)
- populateObjCForDestinationSet(dstLocation, svalBuilder, S, elem, elementV,
- SymMgr, currBldrCtx, Bldr,
- /*hasElements=*/true);
+ if (!isContainerNull)
+ populateObjCForDestinationSet(PredSingleton, svalBuilder, S, elem,
+ elementV, SymMgr, currBldrCtx, Bldr,
+ /*hasElements=*/true);
- populateObjCForDestinationSet(dstLocation, svalBuilder, S, elem, elementV,
- SymMgr, currBldrCtx, Bldr,
- /*hasElements=*/false);
+ populateObjCForDestinationSet(PredSingleton, svalBuilder, S, elem, elementV,
+ SymMgr, currBldrCtx, Bldr,
+ /*hasElements=*/false);
----------------
NagyDonat wrote:
> Can we do this in a separate NFC PR?
Of course, that's completely fine. Thanks in advance for implementing it!
https://github.com/llvm/llvm-project/pull/124477
More information about the cfe-commits
mailing list