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 @@ -188,6 +188,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); } 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 @@ -391,6 +391,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(