From 7730599c41646842f325598f24c77c8157acd706 Mon Sep 17 00:00:00 2001 From: Nathan James Date: Tue, 26 Jan 2021 18:59:29 +0000 Subject: [PATCH] [clangd] FindTarget resolves base specifier FindTarget on the virtual keyword or access specifier of a base specifier will now resolve to type of the base specifier. Reviewed By: sammccall Differential Revision: https://reviews.llvm.org/D95338 --- clang-tools-extra/clangd/FindTarget.cpp | 3 ++- .../clangd/unittests/FindTargetTests.cpp | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/clang-tools-extra/clangd/FindTarget.cpp b/clang-tools-extra/clangd/FindTarget.cpp index 84316659daad..46c98685dabb 100644 --- a/clang-tools-extra/clangd/FindTarget.cpp +++ b/clang-tools-extra/clangd/FindTarget.cpp @@ -710,7 +710,8 @@ allTargetDecls(const DynTypedNode &N) { 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 index 46e17dc053c0..1dab9d093538 100644 --- a/clang-tools-extra/clangd/unittests/FindTargetTests.cpp +++ b/clang-tools-extra/clangd/unittests/FindTargetTests.cpp @@ -230,6 +230,24 @@ TEST_F(TargetDeclTest, UsingDecl) { {"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 {