Index: clang-tools-extra/trunk/clangd/FindTarget.cpp =================================================================== --- clang-tools-extra/trunk/clangd/FindTarget.cpp +++ clang-tools-extra/trunk/clangd/FindTarget.cpp @@ -189,6 +189,10 @@ D = USD; Outer.add(D, Flags); } + void VisitOverloadExpr(const OverloadExpr *OE) { + for (auto *D : OE->decls()) + Outer.add(D, Flags); + } void VisitCXXConstructExpr(const CXXConstructExpr *CCE) { Outer.add(CCE->getConstructor(), Flags); } Index: clang-tools-extra/trunk/clangd/unittests/FindTargetTests.cpp =================================================================== --- clang-tools-extra/trunk/clangd/unittests/FindTargetTests.cpp +++ clang-tools-extra/trunk/clangd/unittests/FindTargetTests.cpp @@ -393,6 +393,32 @@ EXPECT_DECLS("DeclRefExpr", "auto int x = 1"); } +TEST_F(TargetDeclTest, OverloadExpr) { + Code = R"cpp( + void func(int*); + void func(char*); + + template + void foo(T t) { + [[func]](t); + }; + )cpp"; + EXPECT_DECLS("UnresolvedLookupExpr", "void func(int *)", "void func(char *)"); + + Code = R"cpp( + struct X { + void func(int*); + void func(char*); + }; + + template + void foo(X x, T t) { + x.[[func]](t); + }; + )cpp"; + EXPECT_DECLS("UnresolvedMemberExpr", "void func(int *)", "void func(char *)"); +} + TEST_F(TargetDeclTest, ObjC) { Flags = {"-xobjective-c"}; Code = R"cpp(