nridge updated this revision to Diff 250922. nridge marked an inline comment as done. nridge added a comment.
Address final review comment Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D76103/new/ https://reviews.llvm.org/D76103 Files: clang-tools-extra/clangd/FindTarget.cpp clang-tools-extra/clangd/unittests/XRefsTests.cpp Index: clang-tools-extra/clangd/unittests/XRefsTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/XRefsTests.cpp +++ clang-tools-extra/clangd/unittests/XRefsTests.cpp @@ -520,6 +520,14 @@ void test(unique_ptr<S<T>>& V) { V->fo^o(); } + )cpp", + + R"cpp(// Heuristic resolution of dependent enumerator + template <typename T> + struct Foo { + enum class E { [[A]], B }; + E e = E::A^; + }; )cpp"}; for (const char *Test : Tests) { Annotations T(Test); Index: clang-tools-extra/clangd/FindTarget.cpp =================================================================== --- clang-tools-extra/clangd/FindTarget.cpp +++ clang-tools-extra/clangd/FindTarget.cpp @@ -37,6 +37,7 @@ #include "llvm/Support/Casting.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/raw_ostream.h" +#include <iterator> #include <utility> #include <vector> @@ -76,6 +77,11 @@ bool IsNonstaticMember) { if (!T) return {}; + if (auto *ET = T->getAs<EnumType>()) { + auto Result = + ET->getDecl()->lookup(NameFactory(ET->getDecl()->getASTContext())); + return {Result.begin(), Result.end()}; + } if (auto *ICNT = T->getAs<InjectedClassNameType>()) { T = ICNT->getInjectedSpecializationType().getTypePtrOrNull(); }
Index: clang-tools-extra/clangd/unittests/XRefsTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/XRefsTests.cpp +++ clang-tools-extra/clangd/unittests/XRefsTests.cpp @@ -520,6 +520,14 @@ void test(unique_ptr<S<T>>& V) { V->fo^o(); } + )cpp", + + R"cpp(// Heuristic resolution of dependent enumerator + template <typename T> + struct Foo { + enum class E { [[A]], B }; + E e = E::A^; + }; )cpp"}; for (const char *Test : Tests) { Annotations T(Test); Index: clang-tools-extra/clangd/FindTarget.cpp =================================================================== --- clang-tools-extra/clangd/FindTarget.cpp +++ clang-tools-extra/clangd/FindTarget.cpp @@ -37,6 +37,7 @@ #include "llvm/Support/Casting.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/raw_ostream.h" +#include <iterator> #include <utility> #include <vector> @@ -76,6 +77,11 @@ bool IsNonstaticMember) { if (!T) return {}; + if (auto *ET = T->getAs<EnumType>()) { + auto Result = + ET->getDecl()->lookup(NameFactory(ET->getDecl()->getASTContext())); + return {Result.begin(), Result.end()}; + } if (auto *ICNT = T->getAs<InjectedClassNameType>()) { T = ICNT->getInjectedSpecializationType().getTypePtrOrNull(); }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits