================
@@ -384,8 +429,59 @@ StmtResult
Sema::BuildNonEnumeratingCXXExpansionStmtPattern(
Data.IterDecl, LParenLoc, ColonLoc, RParenLoc);
}
- Diag(ESD->getLocation(), diag::err_expansion_statements_todo);
- return StmtError();
+ // If not, try destructuring.
+ StmtResult DecompDeclStmt = BuildDestructuringDecompositionDecl(
+ *this, ExpansionInitializer, ColonLoc, ExpansionVar->isConstexpr(),
+ LifetimeExtendTemps);
+ if (DecompDeclStmt.isInvalid()) {
+ ActOnInitializerError(ExpansionVar);
+ return StmtError();
+ }
+
+ auto *DS = DecompDeclStmt.getAs<DeclStmt>();
+ auto *DD = cast<DecompositionDecl>(DS->getSingleDecl());
+ if (DD->isInvalidDecl())
+ return StmtError();
+
+ // Synthesise an InitListExpr to store the bindings; this essentially lets us
+ // desugar the expansion of a destructuring expansion statement to that of an
+ // enumerating expansion statement.
+ SmallVector<Expr *> Bindings;
----------------
cor3ntin wrote:
Can you call reserve?
https://github.com/llvm/llvm-project/pull/169685
_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits