================
@@ -449,10 +449,7 @@ void CoreEngine::HandleBlockExit(const CFGBlock * B, 
ExplodedNode *Pred) {
         return;
 
       case Stmt::SwitchStmtClass: {
-        SwitchNodeBuilder builder(Pred, B, cast<SwitchStmt>(Term)->getCond(),
-                                    this);
-
-        ExprEng.processSwitch(builder);
+        ExprEng.processSwitch(cast<SwitchStmt>(Term), *this, B, Pred);
----------------
NagyDonat wrote:

I'm not sure what would be the natural order of arguments in this method. 
Ending the argument list with `B` (the `CFGBlock` and `Pred` (the 
`ExplodedNode`) is modeled after `HandleBranch`, but I'm also open to changing 
those.

I had an attempted rewrite where I would "pack" `*this`, `B` and `Pred` into a 
single `NodeBuilderContext` (because `NodeBuilderContext` is _almost_ a 
`CoreEngine*` + `CFGBlock` + `ExplodedNode` triple), but I couldn't quite make 
it work. (It seems that `NodeBuilderContext` only stores a `LocationContext` 
and not an `ExplodedNode`. )

Note that `ExprEngine::processBranch` takes a `NodeBuilderContext` (which is 
initialized in `CoreEngine::HandleBlock`, but  `BranchNodeBuilder` is not 
derived from `NodeBuilder` so it is not designed to "work together well" with a 
`NodeBuilderContext`.

https://github.com/llvm/llvm-project/pull/178678
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to