diff --git a/clang-tools-extra/clangd/FindTarget.cpp b/clang-tools-extra/clangd/FindTarget.cpp --- a/clang-tools-extra/clangd/FindTarget.cpp +++ b/clang-tools-extra/clangd/FindTarget.cpp @@ -507,7 +507,8 @@ // DeclRefExpr). if (Arg.getKind() == TemplateArgument::Template || Arg.getKind() == TemplateArgument::TemplateExpansion) { - if (TemplateDecl *TD = Arg.getAsTemplate().getAsTemplateDecl()) { + if (TemplateDecl *TD = + Arg.getAsTemplateOrTemplatePattern().getAsTemplateDecl()) { report(TD, Flags); } } diff --git a/clang-tools-extra/clangd/unittests/FindTargetTests.cpp b/clang-tools-extra/clangd/unittests/FindTargetTests.cpp --- a/clang-tools-extra/clangd/unittests/FindTargetTests.cpp +++ b/clang-tools-extra/clangd/unittests/FindTargetTests.cpp @@ -341,6 +341,15 @@ EXPECT_DECLS("TemplateSpecializationTypeLoc", "template class T"); Flags.clear(); + Code = R"cpp( + template class ...T> + class C { + C<[[T...]]> foo; + }; + )cpp"; + EXPECT_DECLS("TemplateArgumentLoc", {"template class ...T"}); + Flags.clear(); + Code = R"cpp( struct S{}; S X;