[clang] a80638e - [NFC][analyzer] Remove various NodeBuilders (#194843)
via cfe-commits
cfe-commits at lists.llvm.org
Thu Apr 30 00:16:24 PDT 2026
Author: DonĂ¡t Nagy
Date: 2026-04-30T09:16:19+02:00
New Revision: a80638ed420b3c1aa6a9f2121573278d9820a81f
URL: https://github.com/llvm/llvm-project/commit/a80638ed420b3c1aa6a9f2121573278d9820a81f
DIFF: https://github.com/llvm/llvm-project/commit/a80638ed420b3c1aa6a9f2121573278d9820a81f.diff
LOG: [NFC][analyzer] Remove various NodeBuilders (#194843)
This commit replaces some `NodeBuilder`s with use of
`CoreEngine::makeNode` in straightforward situations.
Part of the commit series where I gradually eliminate all use of
`NodeBuilder`s to make the logic more transparent.
Added:
Modified:
clang/lib/StaticAnalyzer/Core/ExprEngine.cpp
clang/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp
Removed:
################################################################################
diff --git a/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp b/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp
index 7cfb3bb907f7a..a7a503cd00ab0 100644
--- a/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp
+++ b/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp
@@ -1088,7 +1088,6 @@ void ExprEngine::removeDead(ExplodedNode *Pred, ExplodedNodeSet &Out,
// For each node in CheckedSet, generate CleanedNodes that have the
// environment, the store, and the constraints cleaned up but have the
// user-supplied states as the predecessors.
- NodeBuilder Bldr(CheckedSet, Out, *currBldrCtx);
for (const auto I : CheckedSet) {
ProgramStateRef CheckerState = I->getState();
@@ -1107,7 +1106,9 @@ void ExprEngine::removeDead(ExplodedNode *Pred, ExplodedNodeSet &Out,
// generate a transition to that state.
ProgramStateRef CleanedCheckerSt =
StateMgr.getPersistentStateWithGDM(CleanedState, CheckerState);
- Bldr.generateNode(DiagnosticStmt, I, CleanedCheckerSt, cleanupNodeTag(), K);
+ const ProgramPoint &L = ProgramPoint::getProgramPoint(
+ DiagnosticStmt, K, I->getLocationContext(), cleanupNodeTag());
+ Out.insert(Engine.makeNode(L, CleanedCheckerSt, I));
}
}
@@ -1377,8 +1378,7 @@ void ExprEngine::ProcessAutomaticObjDtor(const CFGAutomaticObjDtor Dtor,
"which shouldn't be in the CFG.");
PostImplicitCall PP(DtorDecl, varDecl->getLocation(), LCtx,
getCFGElementRef(), &PT);
- NodeBuilder Bldr(Pred, Dst, *currBldrCtx);
- Bldr.generateSink(PP, Pred->getState(), Pred);
+ Engine.makeNode(PP, Pred->getState(), Pred, /*MarkAsSink=*/true);
return;
}
}
@@ -1389,17 +1389,14 @@ void ExprEngine::ProcessAutomaticObjDtor(const CFGAutomaticObjDtor Dtor,
CallOpts.IsArrayCtorOrDtor, Idx)
.getAsRegion();
- NodeBuilder Bldr(Pred, Dst, getBuilderContext());
-
static SimpleProgramPointTag PT("ExprEngine",
"Prepare for object destruction");
PreImplicitCall PP(DtorDecl, varDecl->getLocation(), LCtx, getCFGElementRef(),
&PT);
- Pred = Bldr.generateNode(PP, state, Pred);
+ Pred = Engine.makeNode(PP, state, Pred);
if (!Pred)
return;
- Bldr.takeNodes(Pred);
VisitCXXDestructor(varType, Region, Dtor.getTriggerStmt(),
/*IsBase=*/false, Pred, Dst, CallOpts);
@@ -1423,8 +1420,7 @@ void ExprEngine::ProcessDeleteDtor(const CFGDeleteDtor Dtor,
const CXXDestructorDecl *Dtor = RD->getDestructor();
PostImplicitCall PP(Dtor, DE->getBeginLoc(), LCtx, getCFGElementRef());
- NodeBuilder Bldr(Pred, Dst, *currBldrCtx);
- Bldr.generateNode(PP, Pred->getState(), Pred);
+ Dst.insert(Engine.makeNode(PP, Pred->getState(), Pred));
return;
}
@@ -1457,8 +1453,7 @@ void ExprEngine::ProcessDeleteDtor(const CFGDeleteDtor Dtor,
"ExprEngine", "Skipping 0 length array delete destruction");
PostImplicitCall PP(getDtorDecl(DTy), DE->getBeginLoc(), LCtx,
getCFGElementRef(), &PT);
- NodeBuilder Bldr(Pred, Dst, *currBldrCtx);
- Bldr.generateNode(PP, Pred->getState(), Pred);
+ Dst.insert(Engine.makeNode(PP, Pred->getState(), Pred));
return;
}
@@ -1467,16 +1462,14 @@ void ExprEngine::ProcessDeleteDtor(const CFGDeleteDtor Dtor,
}
}
- NodeBuilder Bldr(Pred, Dst, getBuilderContext());
static SimpleProgramPointTag PT("ExprEngine",
"Prepare for object destruction");
PreImplicitCall PP(getDtorDecl(DTy), DE->getBeginLoc(), LCtx,
getCFGElementRef(), &PT);
- Pred = Bldr.generateNode(PP, State, Pred);
+ Pred = Engine.makeNode(PP, State, Pred);
if (!Pred)
return;
- Bldr.takeNodes(Pred);
VisitCXXDestructor(DTy, ArgR, DE, /*IsBase=*/false, Pred, Dst, CallOpts);
}
@@ -1533,8 +1526,7 @@ void ExprEngine::ProcessMemberDtor(const CFGMemberDtor D,
"shouldn't be in the CFG.");
PostImplicitCall PP(DtorDecl, Member->getLocation(), LCtx,
getCFGElementRef(), &PT);
- NodeBuilder Bldr(Pred, Dst, *currBldrCtx);
- Bldr.generateSink(PP, Pred->getState(), Pred);
+ Engine.makeNode(PP, Pred->getState(), Pred, /*MarkAsSink=*/true);
return;
}
}
@@ -1544,17 +1536,14 @@ void ExprEngine::ProcessMemberDtor(const CFGMemberDtor D,
FieldVal =
makeElementRegion(State, FieldVal, T, CallOpts.IsArrayCtorOrDtor, Idx);
- NodeBuilder Bldr(Pred, Dst, getBuilderContext());
-
static SimpleProgramPointTag PT("ExprEngine",
"Prepare for object destruction");
PreImplicitCall PP(DtorDecl, Member->getLocation(), LCtx, getCFGElementRef(),
&PT);
- Pred = Bldr.generateNode(PP, State, Pred);
+ Pred = Engine.makeNode(PP, State, Pred);
if (!Pred)
return;
- Bldr.takeNodes(Pred);
VisitCXXDestructor(T, FieldVal.getAsRegion(), CurDtor->getBody(),
/*IsBase=*/false, Pred, Dst, CallOpts);
diff --git a/clang/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp b/clang/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp
index d3a0c20fd8671..eceb29b4f12b8 100644
--- a/clang/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp
+++ b/clang/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp
@@ -666,11 +666,9 @@ void ExprEngine::finishArgumentConstruction(ExplodedNodeSet &Dst,
const Expr *E = Call.getOriginExpr();
const LocationContext *LC = Call.getLocationContext();
- NodeBuilder B(Pred, Dst, *currBldrCtx);
static SimpleProgramPointTag Tag("ExprEngine",
"Finish argument construction");
- PreStmt PP(E, LC, &Tag);
- B.generateNode(PP, CleanedState, Pred);
+ Dst.insert(Engine.makeNode(PreStmt(E, LC, &Tag), CleanedState, Pred));
}
void ExprEngine::evalCall(ExplodedNodeSet &Dst, ExplodedNode *Pred,
@@ -712,7 +710,6 @@ void ExprEngine::evalCall(ExplodedNodeSet &Dst, ExplodedNode *Pred,
for (ExplodedNode *I : dstPostCall) {
ProgramStateRef State = I->getState();
CallEventRef<> Call = CallTemplate.cloneWithState(State);
- NodeBuilder B(I, Dst, *currBldrCtx);
Escaped.clear();
{
unsigned Arg = -1;
@@ -733,10 +730,10 @@ void ExprEngine::evalCall(ExplodedNodeSet &Dst, ExplodedNode *Pred,
State = processPointerEscapedOnBind(State, Escaped, I->getLocationContext(),
PSK_EscapeOutParameters, &*Call);
- if (State == I->getState())
- Dst.insert(I);
- else
- B.generateNode(I->getLocation(), State, I);
+ if (State != I->getState())
+ I = Engine.makeNode(I->getLocation(), State, I);
+
+ Dst.insert(I);
}
}
More information about the cfe-commits
mailing list