Skip to content

release/23.x: [Clang] Ensure correct template parameter depth for abbreviated templates (#209693) - #209712

Merged
dyung merged 1 commit into
llvm:release/23.xfrom
llvmbot:issue209693
Jul 22, 2026
Merged

release/23.x: [Clang] Ensure correct template parameter depth for abbreviated templates (#209693)#209712
dyung merged 1 commit into
llvm:release/23.xfrom
llvmbot:issue209693

Conversation

@llvmbot

@llvmbot llvmbot commented Jul 15, 2026

Copy link
Copy Markdown
Member

Backport 3485d85

Requested by: @zyn0217

@llvmbot

llvmbot commented Jul 15, 2026

Copy link
Copy Markdown
Member Author

@cor3ntin What do you think about merging this PR to the release branch?

@llvmbot
llvmbot requested a review from cor3ntin July 15, 2026 09:51
@llvmorg-github-actions llvmorg-github-actions Bot added clang Clang issues not falling into any other category clang:frontend Language frontend issues, e.g. anything involving "Sema" labels Jul 15, 2026
@llvmorg-github-actions

Copy link
Copy Markdown

@llvm/pr-subscribers-clang

Author: llvmbot

Changes

Backport 3485d85

Requested by: @zyn0217


Full diff: https://github.com/llvm/llvm-project/pull/209712.diff

2 Files Affected:

  • (modified) clang/lib/Parse/ParseDeclCXX.cpp (+6)
  • (modified) clang/test/SemaCXX/constexpr-late-instantiation.cpp (+32-2)
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp
index 893989bd2398f..d7a9c72eb2da8 100644
--- a/clang/lib/Parse/ParseDeclCXX.cpp
+++ b/clang/lib/Parse/ParseDeclCXX.cpp
@@ -2534,6 +2534,12 @@ bool Parser::ParseCXXMemberDeclaratorBeforeInitializer(
     if (BitfieldSize.isInvalid())
       SkipUntil(tok::comma, StopAtSemi | StopBeforeMatch);
   } else if (Tok.is(tok::kw_requires)) {
+    TemplateParameterDepthRAII CurTemplateDepthTracker(TemplateParameterDepth);
+    // With abbreviated function templates - we need to explicitly add depth to
+    // account for the implicit template parameter list induced by the template.
+    if (DeclaratorInfo.getTemplateParameterLists().empty() &&
+        DeclaratorInfo.getInventedTemplateParameterList())
+      ++CurTemplateDepthTracker;
     ParseTrailingRequiresClauseWithScope(DeclaratorInfo);
   } else {
     ParseOptionalCXX11VirtSpecifierSeq(
diff --git a/clang/test/SemaCXX/constexpr-late-instantiation.cpp b/clang/test/SemaCXX/constexpr-late-instantiation.cpp
index 9aec0c90e61dc..94f5ab4a73616 100644
--- a/clang/test/SemaCXX/constexpr-late-instantiation.cpp
+++ b/clang/test/SemaCXX/constexpr-late-instantiation.cpp
@@ -1,5 +1,10 @@
-// RUN: %clang_cc1 %s -fsyntax-only -verify
-// RUN: %clang_cc1 %s -fexperimental-new-constant-interpreter -fsyntax-only -verify
+// RUN: %clang_cc1 %s -std=c++14 -fsyntax-only -verify
+// RUN: %clang_cc1 %s -std=c++20 -fsyntax-only -verify
+// RUN: %clang_cc1 %s -std=c++2c -fsyntax-only -verify
+
+// RUN: %clang_cc1 %s -std=c++14 -fsyntax-only -fexperimental-new-constant-interpreter -verify
+// RUN: %clang_cc1 %s -std=c++20 -fsyntax-only -fexperimental-new-constant-interpreter -verify
+// RUN: %clang_cc1 %s -std=c++2c -fsyntax-only -fexperimental-new-constant-interpreter -verify
 
 template <typename T>
 constexpr T foo(T a);   // expected-note {{declared here}}
@@ -14,3 +19,28 @@ template <typename T>
 constexpr T foo(T a) {
   return a;
 }
+
+#if __cplusplus > 202002L
+
+namespace GH115118 {
+
+struct foo {
+    // expected-note@-1 2{{while}}
+    foo(const foo&) = default;
+    foo(auto)
+        requires([]<int = 0>() -> bool { return true; }())
+        // expected-error@-1 {{non-constant expression}}
+        // expected-note@-2 {{undefined function}} \
+        // expected-note@-2 {{declared}}
+    {}
+};
+
+// FIXME: This will be fixed by https://github.com/llvm/llvm-project/pull/205557
+struct bar {
+    // expected-note@-1 {{while}}
+    foo x; // check that the lambda gets instantiated.
+};
+
+}  // namespace GH115118
+
+#endif

@dyung dyung moved this from Needs Triage to Needs Review in LLVM Release Status Jul 15, 2026
@zyn0217

zyn0217 commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

@cor3ntin

@cor3ntin cor3ntin left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM - but we probably want a release note

@github-project-automation github-project-automation Bot moved this from Needs Review to Needs Merge in LLVM Release Status Jul 21, 2026
@zyn0217

zyn0217 commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

LGTM - but we probably want a release note

We don't have to, that assertion was introduced in clang 23

…ates (llvm#209693)

This fixes another case of member functions where we overlooked template
depths when only abbreviated template parameters are involved.

This mirrors previous fix cfb2520, but I don't intend to put it in
ParseTrailingRequiresClause because we might want the similar fix for
e.g. noexcept expressions, so let's keep it inline for future refactor.

The example comes from llvm#205557.

(cherry picked from commit 3485d85)
@dyung
dyung merged commit 5deccad into llvm:release/23.x Jul 22, 2026
2 of 3 checks passed
@github-project-automation github-project-automation Bot moved this from Needs Merge to Done in LLVM Release Status Jul 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

clang:frontend Language frontend issues, e.g. anything involving "Sema" clang Clang issues not falling into any other category

Projects

Development

Successfully merging this pull request may close these issues.

4 participants