Skip to content

Commit a657d37

Browse files
committed
[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
1 parent 4e9dbb5 commit a657d37

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

clang/lib/Sema/TreeTransform.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5417,6 +5417,7 @@ QualType TreeTransform<Derived>::TransformTypeInObjectScope(
54175417
case TypeLoc::Typedef:
54185418
case TypeLoc::TemplateSpecialization:
54195419
case TypeLoc::SubstTemplateTypeParm:
5420+
case TypeLoc::SubstTemplateTypeParmPack:
54205421
case TypeLoc::PackIndexing:
54215422
case TypeLoc::Enum:
54225423
case TypeLoc::Record:

clang/test/SemaTemplate/nested-name-spec-template.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,3 +167,18 @@ namespace unresolved_using {
167167
};
168168
template struct C<int>;
169169
} // namespace unresolved_using
170+
171+
#if __cplusplus >= 201703L
172+
namespace SubstTemplateTypeParmPackType {
173+
template <int...> struct A {};
174+
175+
template <class... Ts> void f() {
176+
[]<int ... Is>(A<Is...>) { (Ts::g(Is) && ...); }(A<0>{});
177+
// expected-warning@-1 {{explicit template parameter list for lambdas is a C++20 extension}}
178+
};
179+
180+
struct B { static void g(int); };
181+
182+
template void f<B>();
183+
} // namespace SubstTemplateTypeParmPackType
184+
#endif

0 commit comments

Comments
 (0)