[clang-tools-extra] 5a9da12 - [clang] Fix incorrect PackIndexingTypeLoc traversal in RecursiveASTVisitor (#231191)
via cfe-commits
cfe-commits at lists.llvm.org
Fri Oct 16 19:00:37 PDT 2026
Author: max-winkler
Date: 2026-10-17T10:00:31+08:00
New Revision: 5a9da12223bd112ae249eb11c34d48be3b3f55cc
URL: https://github.com/llvm/llvm-project/commit/5a9da12223bd112ae249eb11c34d48be3b3f55cc
DIFF: https://github.com/llvm/llvm-project/commit/5a9da12223bd112ae249eb11c34d48be3b3f55cc.diff
LOG: [clang] Fix incorrect PackIndexingTypeLoc traversal in RecursiveASTVisitor (#231191)
Fixes [clangd/clangd#2713](https://github.com/clangd/clangd/issues/2713)
Assisted-by: Claude
Added:
Modified:
clang-tools-extra/clangd/unittests/FindTargetTests.cpp
clang/include/clang/AST/RecursiveASTVisitor.h
clang/unittests/AST/SourceLocationTest.cpp
Removed:
################################################################################
diff --git a/clang-tools-extra/clangd/unittests/FindTargetTests.cpp b/clang-tools-extra/clangd/unittests/FindTargetTests.cpp
index cd57eb7d912b8..388dfe7a0e7aa 100644
--- a/clang-tools-extra/clangd/unittests/FindTargetTests.cpp
+++ b/clang-tools-extra/clangd/unittests/FindTargetTests.cpp
@@ -691,6 +691,15 @@ TEST_F(TargetDeclTest, PackIndexing) {
)cpp";
EXPECT_DECLS("TemplateSpecializationTypeLoc",
"template <typename> class ...X");
+
+ Code = R"cpp(
+ // Indexed type template parameter pack
+ template <typename... X>
+ void foo() {
+ [[X]]...[0] x;
+ }
+ )cpp";
+ EXPECT_DECLS("TemplateTypeParmTypeLoc", "typename ...X");
}
TEST_F(TargetDeclTest, PackIndexedConcept) {
diff --git a/clang/include/clang/AST/RecursiveASTVisitor.h b/clang/include/clang/AST/RecursiveASTVisitor.h
index f144c890f6ee6..13dd5eda84fa6 100644
--- a/clang/include/clang/AST/RecursiveASTVisitor.h
+++ b/clang/include/clang/AST/RecursiveASTVisitor.h
@@ -1469,7 +1469,7 @@ DEF_TRAVERSE_TYPELOC(DecltypeType, {
})
DEF_TRAVERSE_TYPELOC(PackIndexingType, {
- TRY_TO(TraverseType(TL.getPattern()));
+ TRY_TO(TraverseTypeLoc(TL.getPatternLoc()));
TRY_TO(TraverseStmt(TL.getTypePtr()->getIndexExpr()));
})
diff --git a/clang/unittests/AST/SourceLocationTest.cpp b/clang/unittests/AST/SourceLocationTest.cpp
index 06993a0270300..4cc3c7aae9829 100644
--- a/clang/unittests/AST/SourceLocationTest.cpp
+++ b/clang/unittests/AST/SourceLocationTest.cpp
@@ -1111,6 +1111,26 @@ TEST(PackIndexingTypeLoc, PatternAndEllipsisLoc) {
typeLoc(hasParent(varDecl(hasName("x")))), Lang_CXX26));
}
+TEST(PackIndexingTypeLoc, PatternIsTraversed) {
+ RangeVerifier<TypeLoc> Verifier;
+ Verifier.expectRange(2, 8, 2, 8);
+ EXPECT_TRUE(Verifier.match(
+ R"cpp(template <class... T> void foo() {
+ T...[0] x;
+ })cpp",
+ typeLoc(loc(templateTypeParmType())), Lang_CXX26));
+}
+
+TEST(PackIndexingTypeLoc, PatternIsTraversedInAlias) {
+ RangeVerifier<TypeLoc> Verifier;
+ Verifier.expectRange(2, 18, 2, 18);
+ EXPECT_TRUE(Verifier.match(
+ R"cpp(template <class... T> void foo() {
+ using U = T...[0];
+ })cpp",
+ typeLoc(loc(templateTypeParmType())), Lang_CXX26));
+}
+
class ConceptSpecializationExprConceptReferenceRangeVerifier
: public RangeVerifier<VarTemplateDecl> {
protected:
More information about the cfe-commits
mailing list