================
@@ -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
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to