[clang] [Clang][Sema] Disable checking invalid template id in primary variable template initializer (PR #139490)
Yanzuo Liu via cfe-commits
cfe-commits at lists.llvm.org
Sun May 11 20:12:13 PDT 2025
https://github.com/zwuis created https://github.com/llvm/llvm-project/pull/139490
Workaround for #139067
>From c5a9cda3e5c3aa2b07281e373e9736045a01643b Mon Sep 17 00:00:00 2001
From: Yanzuo Liu <zwuis at outlook.com>
Date: Mon, 12 May 2025 11:08:50 +0800
Subject: [PATCH] Disable checking invalid template id in primary variable
template initializer
---
clang/lib/Sema/SemaTemplate.cpp | 3 +++
clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp | 4 ++--
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/clang/lib/Sema/SemaTemplate.cpp b/clang/lib/Sema/SemaTemplate.cpp
index 7940340064eda..365c61949379d 100644
--- a/clang/lib/Sema/SemaTemplate.cpp
+++ b/clang/lib/Sema/SemaTemplate.cpp
@@ -4382,6 +4382,8 @@ Sema::CheckVarTemplateId(VarTemplateDecl *Template, SourceLocation TemplateLoc,
return Context.isSameTemplateArgument(Arg1, Arg2);
};
+// Workaround for GH139067 / https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120190
+#if 0
if (VarDecl *Var = Template->getTemplatedDecl();
ParsingInitForAutoVars.count(Var) &&
llvm::equal(
@@ -4393,6 +4395,7 @@ Sema::CheckVarTemplateId(VarTemplateDecl *Template, SourceLocation TemplateLoc,
<< diag::ParsingInitFor::VarTemplate << Var << Var->getType();
return true;
}
+#endif
SmallVector<VarTemplatePartialSpecializationDecl *, 4> PartialSpecs;
Template->getPartialSpecializations(PartialSpecs);
diff --git a/clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp b/clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp
index 1fe0ce9aabf29..a60d723e477c4 100644
--- a/clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp
+++ b/clang/test/SemaCXX/cxx1y-variable-templates_top_level.cpp
@@ -495,12 +495,12 @@ static_assert(C<int, 0,1,2,3,4>::VALUEARRAY[0] == 0, "");
namespace appear_in_its_own_init {
template <class T>
-auto GH51347 = GH51347<T>; // expected-error {{variable template 'GH51347' declared with deduced type 'auto' cannot appear in its own initializer}}
+auto GH51347 = GH51347<T>;
template <class T, class... Ts>
auto a = [] {
using U = T;
- a<U, Ts...>; // expected-error {{variable template 'a' declared with deduced type 'auto' cannot appear in its own initializer}}
+ a<U, Ts...>;
};
template <int...> int b;
More information about the cfe-commits
mailing list