Author: Denis Fatkulin Date: 2022-08-19T19:02:42+03:00 New Revision: ee648c0ce09b1edcee65407041eab38228f4b042
URL: https://github.com/llvm/llvm-project/commit/ee648c0ce09b1edcee65407041eab38228f4b042 DIFF: https://github.com/llvm/llvm-project/commit/ee648c0ce09b1edcee65407041eab38228f4b042.diff LOG: [clang][index] Index unresolved member expression as reference Unresolved member expressions aren't indexed as references. Example code: ``` struct Foo { template <typename T> void bar(T t); }; template <typename T> void test(Foo F, T t) { F.bar(t); // Not indexed } ``` Reviewed By: hokein Differential Revision: https://reviews.llvm.org/D131091 Added: Modified: clang-tools-extra/clangd/unittests/XRefsTests.cpp clang/lib/Index/IndexBody.cpp clang/test/Index/Core/index-dependent-source.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/clangd/unittests/XRefsTests.cpp b/clang-tools-extra/clangd/unittests/XRefsTests.cpp index 40650c36046cb..e9e6b6f79a2d5 100644 --- a/clang-tools-extra/clangd/unittests/XRefsTests.cpp +++ b/clang-tools-extra/clangd/unittests/XRefsTests.cpp @@ -2090,6 +2090,14 @@ TEST(FindReferences, WithinAST) { [[f^oo]](s); } )cpp", + R"cpp(// unresolved member expression + struct Foo { + template <typename T> void $decl[[b^ar]](T t); + }; + template <typename T> void test(Foo F, T t) { + F.[[bar]](t); + } + )cpp", // Enum base R"cpp( diff --git a/clang/lib/Index/IndexBody.cpp b/clang/lib/Index/IndexBody.cpp index eb8905a7459cd..8b8235c133023 100644 --- a/clang/lib/Index/IndexBody.cpp +++ b/clang/lib/Index/IndexBody.cpp @@ -468,7 +468,7 @@ class BodyIndexer : public RecursiveASTVisitor<BodyIndexer> { return true; } - bool VisitUnresolvedLookupExpr(UnresolvedLookupExpr *E) { + bool VisitOverloadExpr(OverloadExpr *E) { SmallVector<SymbolRelation, 4> Relations; SymbolRoleSet Roles = getRolesForRef(E, Relations); for (auto *D : E->decls()) diff --git a/clang/test/Index/Core/index-dependent-source.cpp b/clang/test/Index/Core/index-dependent-source.cpp index 8832edefd5bf9..8fec9abd1e926 100644 --- a/clang/test/Index/Core/index-dependent-source.cpp +++ b/clang/test/Index/Core/index-dependent-source.cpp @@ -231,3 +231,12 @@ template <typename T> void bar() { foo<T>(); // CHECK: [[@LINE-1]]:3 | function/C | foo | c:@FT@>1#Tfoo#v# | <no-cgname> | Ref,Call,RelCall,RelCont | rel: 1 } + +struct Foo { + template <typename T> void bar(); + // CHECK: [[@LINE-1]]:30 | instance-method/C++ | bar | c:@S@Foo@FT@>1#Tbar#v# | <no-cgname> | Decl,RelChild | rel: 1 +}; +template <typename T> void baz(Foo f) { + f.bar<T>(); + // CHECK: [[@LINE-1]]:5 | instance-method/C++ | bar | c:@S@Foo@FT@>1#Tbar#v# | <no-cgname> | Ref,Call,RelCall,RelCont | rel: 1 +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits