================
@@ -3447,6 +3461,22 @@ void ExprEngine::VisitArrayInitLoopExpr(const
ArrayInitLoopExpr *Ex,
getCheckerManager().runCheckersForPostStmt(Dst, EvalSet, Ex, *this);
}
+void ExprEngine::VisitPackIndexingExpr(const PackIndexingExpr *E,
+ ExplodedNode *Pred,
+ ExplodedNodeSet &Dst) {
+ if (!E->isFullySubstituted()) {
+ llvm_unreachable("Unsubstituted pack indexing expression");
+ }
+
+ if (const auto *DRE = dyn_cast<DeclRefExpr>(E->getSelectedExpr())) {
+ VisitCommonDeclRefExpr(E, DRE->getDecl(), Pred, Dst);
+ return;
+ }
+
+ StmtNodeBuilder Bldr(Pred, Dst, *currBldrCtx);
+ Bldr.generateSink(E, Pred, Pred->getState());
----------------
isuckatcs wrote:
A sink node usually indicates an error. How about we add a
`SimpleProgramPointTag` to the sink node that explains what the error was?
Also is it guaranteed that the selected expression is a `DeclRefExpr`? If it
is, this sink should probably be an assertion, if it isn't we should indicate
in a FIXME that other cases need to be handled as well.
https://github.com/llvm/llvm-project/pull/173186
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits