diff --git a/clang/lib/Index/IndexDecl.cpp b/clang/lib/Index/IndexDecl.cpp index 882e02836d4fb..1c04aa17d53fb 100644 --- a/clang/lib/Index/IndexDecl.cpp +++ b/clang/lib/Index/IndexDecl.cpp @@ -705,6 +705,7 @@ class IndexingDeclVisitor : public ConstDeclVisitor { IndexCtx.handleReference(C->getNamedConcept(), C->getConceptNameLoc(), Parent, TTP->getLexicalDeclContext()); } else if (const auto *NTTP = dyn_cast(TP)) { + IndexCtx.indexTypeSourceInfo(NTTP->getTypeSourceInfo(), Parent); if (NTTP->hasDefaultArgument()) IndexCtx.indexBody(NTTP->getDefaultArgument(), Parent); } else if (const auto *TTPD = dyn_cast(TP)) { diff --git a/clang/unittests/Index/IndexTests.cpp b/clang/unittests/Index/IndexTests.cpp index 88ad63b97b92a..690673a1072b0 100644 --- a/clang/unittests/Index/IndexTests.cpp +++ b/clang/unittests/Index/IndexTests.cpp @@ -392,6 +392,20 @@ TEST(IndexTest, EnumBase) { Contains(AllOf(QName("MyTypedef"), HasRole(SymbolRole::Reference), WrittenAt(Position(4, 16)))))); } + +TEST(IndexTest, NonTypeTemplateParameter) { + std::string Code = R"cpp( + enum class Foobar { foo }; + template + constexpr void func() {} + )cpp"; + auto Index = std::make_shared(); + tooling::runToolOnCode(std::make_unique(Index), Code); + EXPECT_THAT(Index->Symbols, + Contains(AllOf(QName("Foobar"), HasRole(SymbolRole::Reference), + WrittenAt(Position(3, 15))))); +} + } // namespace } // namespace index } // namespace clang