[llvm-branch-commits] [clang] [Clang] [C++26] Expansion Statements (Part 2: Parsing and Parser Tests) (PR #169681)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon May 4 08:38:09 PDT 2026
================
@@ -0,0 +1,76 @@
+//===-- SemaExpand.cpp - Semantic Analysis for Expansion Statements--------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file implements semantic analysis for C++26 expansion statements,
+// aka 'template for'.
+//
+//===----------------------------------------------------------------------===//
+
+#include "clang/AST/DeclCXX.h"
+#include "clang/AST/ExprCXX.h"
+#include "clang/AST/StmtCXX.h"
+#include "clang/Lex/Preprocessor.h"
+#include "clang/Sema/EnterExpressionEvaluationContext.h"
+#include "clang/Sema/Lookup.h"
+#include "clang/Sema/Overload.h"
+#include "clang/Sema/Sema.h"
+#include "clang/Sema/Template.h"
+
+using namespace clang;
+
+
+CXXExpansionStmtDecl *
+Sema::ActOnCXXExpansionStmtDecl(unsigned TemplateDepth,
+ SourceLocation TemplateKWLoc) {
+ // Create a template parameter '__N'. This will be used to denote the index
+ // of the element that we're instantiating. CWG 3044 requires this type to
+ // be 'ptrdiff_t' for iterating expansion statements, so use that in all
+ // cases.
+ IdentifierInfo *ParmName = &Context.Idents.get("__N");
+ QualType ParmTy = Context.getPointerDiffType();
+ TypeSourceInfo *ParmTI =
+ Context.getTrivialTypeSourceInfo(ParmTy, TemplateKWLoc);
+
+ auto *TParam = NonTypeTemplateParmDecl::Create(
+ Context, Context.getTranslationUnitDecl(), TemplateKWLoc, TemplateKWLoc,
+ TemplateDepth, /*Position=*/0, ParmName, ParmTy, /*ParameterPack=*/false,
+ ParmTI);
----------------
Sirraide wrote:
It probably doesn’t; I’ll try removing it
https://github.com/llvm/llvm-project/pull/169681
More information about the llvm-branch-commits
mailing list