================
@@ -261,6 +261,35 @@ StmtResult
Parser::ParseStatementOrDeclarationAfterAttributes(
}
case tok::kw_template: {
+ if (NextToken().is(tok::kw_for)) {
+ // Expansion statements are not backported for now.
+ if (!getLangOpts().CPlusPlus26) {
+ Diag(Tok.getLocation(), diag::err_expansion_stmt_requires_cxx2c);
+
+ // Trying to parse this as a regular 'for' statement instead yields
+ // better error recovery.
+ ConsumeToken();
+ return ParseForStatement(TrailingElseLoc, PrecedingLabel);
+ }
+
+ SourceLocation TemplateLoc = ConsumeToken();
+ return ParseExpansionStatement(TrailingElseLoc, PrecedingLabel,
+ TemplateLoc);
+ }
+
+ // Since 'template for' is a thing, users might reasonably try to write
+ // 'template while' or something like that; diagnose that here for better
+ // QOI (and basically just ignore the 'template' token for error recovery).
+ if (NextToken().isOneOf(tok::kw_while, tok::kw_do)) {
+ Diag(Tok.getLocation(), diag::err_expansion_stmt_invalid_kw)
+ << NextToken().getKind();
----------------
Sirraide wrote:
Actually I thought you meant we should remove the handling for `for template`;
actually iirc @Endilll asked me to add code to handle `template do`/`template
while`
https://github.com/llvm/llvm-project/pull/169681
_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits