[clang] [clang][Sema] Fix assertion crash on invalid concept template parameter (#225792) (PR #235408)
via cfe-commits
cfe-commits at lists.llvm.org
Sun Oct 25 23:23:04 PDT 2026
https://github.com/Sriraj2911 updated https://github.com/llvm/llvm-project/pull/235408
>From 0b8a70bee7181572063a35fa23c81852f40786ff Mon Sep 17 00:00:00 2001
From: Sriraj2911 <cs24btech11066 at iith.ac.in>
Date: Mon, 26 Oct 2026 11:51:11 +0530
Subject: [PATCH] [clang][Sema] Fix assertion crash on invalid concept template
parameter (#225792)
Fixes an assertion failure ('Parameter && \'A variable template id without template?\'')
in CheckVarOrConceptTemplateTemplateId when processing malformed concept template parameters.
Fixes #225792
---
clang/lib/Sema/SemaTemplate.cpp | 3 +++
clang/test/SemaCXX/225792.cpp | 10 ++++++++++
2 files changed, 13 insertions(+)
create mode 100644 clang/test/SemaCXX/225792.cpp
diff --git a/clang/lib/Sema/SemaTemplate.cpp b/clang/lib/Sema/SemaTemplate.cpp
index 5a61cb852d15e5..0b4d7343b901f5 100644
--- a/clang/lib/Sema/SemaTemplate.cpp
+++ b/clang/lib/Sema/SemaTemplate.cpp
@@ -4874,6 +4874,9 @@ ExprResult Sema::CheckVarOrConceptTemplateTemplateId(
const TemplateArgumentListInfo *TemplateArgs) {
TemplateTemplateParmDecl *Parameter =
Template.getAsTemplateTemplateParmDecl();
+ if(!Parameter || Parameter->isInvalidDecl()){
+ return ExprError();
+ }
assert(Parameter && "A variable template id without template?");
if (Parameter->templateParameterKind() !=
diff --git a/clang/test/SemaCXX/225792.cpp b/clang/test/SemaCXX/225792.cpp
new file mode 100644
index 00000000000000..eec8be8c100d9f
--- /dev/null
+++ b/clang/test/SemaCXX/225792.cpp
@@ -0,0 +1,10 @@
+// RUN: %clang_cc1 -std=c++20 -fsyntax-only -verify %s
+
+template <class T>
+concept C = true;
+
+template <template <class> concept... CC> // expected-error {{concept template parameter is a C++2c extension}}
+int foo(CC &) { return 42; } // expected-error {{expected 'auto' or 'decltype(auto)' after concept name}} \
+ // expected-note {{candidate template ignored: constraints not satisfied}}
+
+static_assert(foo<C>(0) == 42, ""); // expected-error {{no matching function for call to 'foo'}}
\ No newline at end of file
More information about the cfe-commits
mailing list