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 @@ -710,7 +710,8 @@ Finder.add(CCI, Flags); else if (const TemplateArgumentLoc *TAL = N.get()) Finder.add(TAL->getArgument(), Flags); - + else if (const CXXBaseSpecifier *CBS = N.get()) + Finder.add(CBS->getTypeSourceInfo()->getType(), Flags); return Finder.takeDecls(); } 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 @@ -230,6 +230,24 @@ {"void waldo()"}); } +TEST_F(TargetDeclTest, BaseSpecifier) { + Code = R"cpp( + struct X {}; + struct Y : [[private]] X {}; + )cpp"; + EXPECT_DECLS("CXXBaseSpecifier", "struct X"); + Code = R"cpp( + struct X {}; + struct Y : [[private X]] {}; + )cpp"; + EXPECT_DECLS("CXXBaseSpecifier", "struct X"); + Code = R"cpp( + struct X {}; + struct Y : private [[X]] {}; + )cpp"; + EXPECT_DECLS("RecordTypeLoc", "struct X"); +} + TEST_F(TargetDeclTest, ConstructorInitList) { Code = R"cpp( struct X {