[clang] [clang] fix runtime check for NNS transform (PR #154418)
Matheus Izvekov via cfe-commits
cfe-commits at lists.llvm.org
Tue Aug 19 13:10:41 PDT 2025
https://github.com/mizvekov created https://github.com/llvm/llvm-project/pull/154418
A SubstTemplateTypeParmPackType is one of the types which may appear in a NestedNameSpecifier, so add it to the list of expected types in TreeTransform.
This fixes a regression introduced in #147835, which has never been released, so there are no release notes.
Fixes #154270
>From dc7bbfcbeb4af550fb0bda2b779961ec9e9132f3 Mon Sep 17 00:00:00 2001
From: Matheus Izvekov <mizvekov at gmail.com>
Date: Tue, 19 Aug 2025 17:07:07 -0300
Subject: [PATCH] [clang] fix runtime check for NNS transform
A SubstTemplateTypeParmPackType is one of the types which may appear
in a NestedNameSpecifier, so add it to the list of expected types in TreeTransform.
This fixes a regression introduced in #147835, which has never been released, so
there are no release notes.
Fixes #154270
---
clang/lib/Sema/TreeTransform.h | 1 +
.../test/SemaTemplate/nested-name-spec-template.cpp | 12 ++++++++++++
2 files changed, 13 insertions(+)
diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h
index 51f58e35a1ef4..f46cb675805b5 100644
--- a/clang/lib/Sema/TreeTransform.h
+++ b/clang/lib/Sema/TreeTransform.h
@@ -5417,6 +5417,7 @@ QualType TreeTransform<Derived>::TransformTypeInObjectScope(
case TypeLoc::Typedef:
case TypeLoc::TemplateSpecialization:
case TypeLoc::SubstTemplateTypeParm:
+ case TypeLoc::SubstTemplateTypeParmPackType:
case TypeLoc::PackIndexing:
case TypeLoc::Enum:
case TypeLoc::Record:
diff --git a/clang/test/SemaTemplate/nested-name-spec-template.cpp b/clang/test/SemaTemplate/nested-name-spec-template.cpp
index e6cbe3812da52..6d4d759ab6b86 100644
--- a/clang/test/SemaTemplate/nested-name-spec-template.cpp
+++ b/clang/test/SemaTemplate/nested-name-spec-template.cpp
@@ -167,3 +167,15 @@ namespace unresolved_using {
};
template struct C<int>;
} // namespace unresolved_using
+
+namespace SubstTemplateTypeParmPackType {
+ template <int...> struct A {};
+
+ template <class... Ts> void f() {
+ []<int ... Is>(A<Is...>) { (Ts::g(Is) && ...); }(A<0>{});
+ };
+
+ struct B { static void g(int); };
+
+ template void f<B>();
+} // namespace SubstTemplateTypeParmPackType
More information about the cfe-commits
mailing list