[clang] a01e1d4 - [clang][Sema] Handle dependent qualifier in HeuristicResolver::resolveDeclRefExpr() (#124515)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Jan 27 00:32:00 PST 2025
Author: Nathan Ridge
Date: 2025-01-27T03:31:56-05:00
New Revision: a01e1d4e044ec0147e04a5af9ca54ede550f5dc1
URL: https://github.com/llvm/llvm-project/commit/a01e1d4e044ec0147e04a5af9ca54ede550f5dc1
DIFF: https://github.com/llvm/llvm-project/commit/a01e1d4e044ec0147e04a5af9ca54ede550f5dc1.diff
LOG: [clang][Sema] Handle dependent qualifier in HeuristicResolver::resolveDeclRefExpr() (#124515)
Added:
Modified:
clang/lib/Sema/HeuristicResolver.cpp
clang/unittests/Sema/HeuristicResolverTest.cpp
Removed:
################################################################################
diff --git a/clang/lib/Sema/HeuristicResolver.cpp b/clang/lib/Sema/HeuristicResolver.cpp
index e893afed71d268..87c7274e7aefa6 100644
--- a/clang/lib/Sema/HeuristicResolver.cpp
+++ b/clang/lib/Sema/HeuristicResolver.cpp
@@ -262,8 +262,9 @@ std::vector<const NamedDecl *> HeuristicResolverImpl::resolveMemberExpr(
std::vector<const NamedDecl *>
HeuristicResolverImpl::resolveDeclRefExpr(const DependentScopeDeclRefExpr *RE) {
- return resolveDependentMember(QualType(RE->getQualifier()->getAsType(), 0),
- RE->getDeclName(), StaticFilter);
+ return resolveDependentMember(
+ resolveNestedNameSpecifierToType(RE->getQualifier()), RE->getDeclName(),
+ StaticFilter);
}
std::vector<const NamedDecl *>
diff --git a/clang/unittests/Sema/HeuristicResolverTest.cpp b/clang/unittests/Sema/HeuristicResolverTest.cpp
index 2b775b11719ea7..e5cd1254d75422 100644
--- a/clang/unittests/Sema/HeuristicResolverTest.cpp
+++ b/clang/unittests/Sema/HeuristicResolverTest.cpp
@@ -385,6 +385,27 @@ TEST(HeuristicResolver, DeclRefExpr_RespectScope) {
dependentScopeDeclRefExpr(hasDependentName("getPointer")).bind("input"));
}
+TEST(HeuristicResolver, DeclRefExpr_Nested) {
+ std::string Code = R"cpp(
+ struct S {
+ static int Waldo;
+ };
+ template <typename T>
+ struct Meta {
+ using Type = S;
+ };
+ template <typename T>
+ void foo() {
+ Meta<T>::Type::Waldo;
+ }
+ )cpp";
+ // Test resolution of "Waldo" in "Meta<T>::Type::Waldo".
+ expectResolution(
+ Code, &HeuristicResolver::resolveDeclRefExpr,
+ dependentScopeDeclRefExpr(hasDependentName("Waldo")).bind("input"),
+ varDecl(hasName("Waldo")).bind("output"));
+}
+
TEST(HeuristicResolver, DependentNameType) {
std::string Code = R"cpp(
template <typename>
More information about the cfe-commits
mailing list