[clang] [NFC][analyzer] Refactor ExprEngine::processCallExit (PR #186182)

DonĂ¡t Nagy via cfe-commits cfe-commits at lists.llvm.org
Sun Mar 15 06:19:08 PDT 2026


================
@@ -388,8 +389,8 @@ void ExprEngine::processCallExit(ExplodedNode *CEBNode) {
     // Step 5: Perform the post-condition check of the CallExpr and enqueue the
     // result onto the work list.
     // CEENode -> Dst -> WorkList
-    NodeBuilderContext Ctx(Engine, calleeCtx->getCallSiteBlock(), CEENode);
-    SaveAndRestore<const NodeBuilderContext *> NBCSave(currBldrCtx, &Ctx);
+    setCurrLocationContextAndBlock(CEENode->getLocationContext(),
+                                   calleeCtx->getCallSiteBlock());
----------------
NagyDonat wrote:

I thought a bit about this, and I think that in this `processCallExit` callback it makes sense to run the two halves of the logic in different contexts, to ensure that the first half provides "the same sort of context" that is used with other uses `removeDead` and the second half provides "the same sort of context" that is used for other `PostStmt` callbacks. (This is not a deep analysis, I'm just 85% sure about this.)

If I really wanted to fit this `CallExit` procedure into the "single context through the whole `dispatchWorkItem`" paradigm, I would've split this long process into two separate work items (at the point of the context change). However, I don't think that this would provide practical benefits, so I don't intend to pursue this direction.

https://github.com/llvm/llvm-project/pull/186182


More information about the cfe-commits mailing list