Index: lib/Index/IndexDecl.cpp =================================================================== --- lib/Index/IndexDecl.cpp +++ lib/Index/IndexDecl.cpp @@ -246,9 +246,6 @@ handleDeclarator(D); if (const CXXConstructorDecl *Ctor = dyn_cast(D)) { - IndexCtx.handleReference(Ctor->getParent(), Ctor->getLocation(), - Ctor->getParent(), Ctor->getDeclContext()); - // Constructor initializers. for (const auto *Init : Ctor->inits()) { if (Init->isWritten()) { @@ -259,12 +256,6 @@ IndexCtx.indexBody(Init->getInit(), D, D); } } - } else if (const CXXDestructorDecl *Dtor = dyn_cast(D)) { - if (auto TypeNameInfo = Dtor->getNameInfo().getNamedTypeInfo()) { - IndexCtx.handleReference(Dtor->getParent(), - TypeNameInfo->getTypeLoc().getBeginLoc(), - Dtor->getParent(), Dtor->getDeclContext()); - } } else if (const auto *Guide = dyn_cast(D)) { IndexCtx.handleReference(Guide->getDeducedTemplate()->getTemplatedDecl(), Guide->getLocation(), Guide, Index: test/Index/Core/index-source.cpp =================================================================== --- test/Index/Core/index-source.cpp +++ test/Index/Core/index-source.cpp @@ -5,17 +5,17 @@ class Cls { public: // CHECK: [[@LINE+3]]:3 | constructor/C++ | Cls | c:@S@Cls@F@Cls#I# | __ZN3ClsC1Ei | Decl,RelChild | rel: 1 // CHECK-NEXT: RelChild | Cls | c:@S@Cls - // CHECK: [[@LINE+1]]:3 | class/C++ | Cls | c:@S@Cls | | Ref,RelCont | rel: 1 + Cls(int x); // CHECK: [[@LINE+2]]:3 | constructor/cxx-copy-ctor/C++ | Cls | c:@S@Cls@F@Cls#&1$@S@Cls# | __ZN3ClsC1ERKS_ | Decl,RelChild | rel: 1 - // CHECK: [[@LINE+1]]:3 | class/C++ | Cls | c:@S@Cls | | Ref,RelCont | rel: 1 + Cls(const Cls &); // CHECK: [[@LINE+2]]:3 | constructor/cxx-move-ctor/C++ | Cls | c:@S@Cls@F@Cls#&&$@S@Cls# | __ZN3ClsC1EOS_ | Decl,RelChild | rel: 1 - // CHECK: [[@LINE+1]]:3 | class/C++ | Cls | c:@S@Cls | | Ref,RelCont | rel: 1 + Cls(Cls &&); // CHECK: [[@LINE+2]]:3 | destructor/C++ | ~Cls | c:@S@Cls@F@~Cls# | __ZN3ClsD1Ev | Decl,RelChild | rel: 1 - // CHECK: [[@LINE+1]]:4 | class/C++ | Cls | c:@S@Cls | | Ref,RelCont | rel: 1 + ~Cls(); }; @@ -35,12 +35,10 @@ Cls::Cls(int x) {} // CHECK: [[@LINE-1]]:6 | constructor/C++ | Cls | c:@S@Cls@F@Cls#I# | __ZN3ClsC1Ei | Def,RelChild | rel: 1 // CHECK: [[@LINE-2]]:1 | class/C++ | Cls | c:@S@Cls | | Ref,RelCont | rel: 1 -// CHECK: [[@LINE-3]]:6 | class/C++ | Cls | c:@S@Cls | | Ref,RelCont | rel: 1 Cls::~/*a comment*/Cls() {} // CHECK: [[@LINE-1]]:6 | destructor/C++ | ~Cls | c:@S@Cls@F@~Cls# | __ZN3ClsD1Ev | Def,RelChild | rel: 1 // CHECK: [[@LINE-2]]:1 | class/C++ | Cls | c:@S@Cls | | Ref,RelCont | rel: 1 -// CHECK: [[@LINE-3]]:20 | class/C++ | Cls | c:@S@Cls | | Ref,RelCont | rel: 1 template class TemplCls { @@ -394,7 +392,6 @@ // CHECK: [[@LINE-1]]:3 | constructor/cxx-copy-ctor/C++ | DeletedMethods | c:@S@DeletedMethods@F@DeletedMethods#&1$@S@DeletedMethods# | __ZN14DeletedMethodsC1ERKS_ | Def,RelChild | rel: 1 // CHECK: RelChild | DeletedMethods | c:@S@DeletedMethods // CHECK: [[@LINE-3]]:24 | struct/C++ | DeletedMethods | c:@S@DeletedMethods | | Ref,RelCont | rel: 1 -// CHECK: [[@LINE-4]]:3 | struct/C++ | DeletedMethods | c:@S@DeletedMethods | | Ref,RelCont | rel: 1 }; namespace ns2 { @@ -494,7 +491,7 @@ // CHECK: [[@LINE-1]]:69 | variable/C++ | structuredBinding2 | c:@N@cpp17structuredBinding@structuredBinding2 | | Ref,Read,RelCont | rel: 1 // CHECK-NEXT: RelCont | localStructuredBindingAndRef | c:@N@cpp17structuredBinding@F@localStructuredBindingAndRef# // CHECK-NOT: localBinding -// LOCAL: [[@LINE-4]]:9 | variable(local)/C++ | localBinding1 | c:index-source.cpp@25408@N@cpp17structuredBinding@F@localStructuredBindingAndRef#@localBinding1 +// LOCAL: [[@LINE-4]]:9 | variable(local)/C++ | localBinding1 | c:index-source.cpp@24750@N@cpp17structuredBinding@F@localStructuredBindingAndRef#@localBinding1 } } Index: unittests/Index/IndexTests.cpp =================================================================== --- unittests/Index/IndexTests.cpp +++ unittests/Index/IndexTests.cpp @@ -257,6 +257,23 @@ Contains(AllOf(QName("std::foo"), Kind(SymbolKind::Using)))); } +TEST(IndexTest, Constructors) { + std::string Code = R"cpp( + struct Foo { + Foo(int); + ~Foo(); + }; + )cpp"; + auto Index = std::make_shared(); + IndexingOptions Opts; + tooling::runToolOnCode(new IndexAction(Index, Opts), Code); + EXPECT_THAT(Index->Symbols, + UnorderedElementsAre( + AllOf(QName("Foo"), Kind(SymbolKind::Struct)), + AllOf(QName("Foo::Foo"), Kind(SymbolKind::Constructor)), + AllOf(QName("Foo::~Foo"), Kind(SymbolKind::Destructor)))); +} + } // namespace } // namespace index } // namespace clang