[clang] [clang] Sequence C++20 Parenthesized List Init (PR #83476)
Richard Smith via cfe-commits
cfe-commits at lists.llvm.org
Thu Feb 29 12:36:58 PST 2024
================
@@ -17626,6 +17626,25 @@ class SequenceChecker : public ConstEvaluatedExprVisitor<SequenceChecker> {
for (unsigned I = 0; I < Elts.size(); ++I)
Tree.merge(Elts[I]);
}
+
+ void VisitCXXParenListInitExpr(const CXXParenListInitExpr *PLIE) {
+ // C++20 parenthesized list initializations are sequenced. See C++20
+ // [decl.init]p17.5 and [decl.init]p17.6.2.2
+ SmallVector<SequenceTree::Seq, 32> Elts;
+ SequenceTree::Seq Parent = Region;
+ for (const Expr *E : PLIE->getInitExprs()) {
+ if (!E)
+ continue;
+ Region = Tree.allocate(Parent);
+ Elts.push_back(Region);
+ Visit(E);
+ }
+
+ // Forget that the initializers are sequenced.
+ Region = Parent;
+ for (unsigned I = 0; I < Elts.size(); ++I)
+ Tree.merge(Elts[I]);
+ }
----------------
zygoloid wrote:
Is it feasible to factor out the common code between this and `VisitInitListExpr`? This looks nearly identical.
https://github.com/llvm/llvm-project/pull/83476
More information about the cfe-commits
mailing list