[clang] [clang][CodeComplete] Use HeuristicResolver to resolve CXXDependentScopeMemberExpr (PR #124449)
Nathan Ridge via cfe-commits
cfe-commits at lists.llvm.org
Sat Jan 25 22:32:52 PST 2025
https://github.com/HighCommander4 created https://github.com/llvm/llvm-project/pull/124449
None
>From 6f0ff1b166f2ea3b0bfa58ca2a0911832d751bdf Mon Sep 17 00:00:00 2001
From: Nathan Ridge <zeratul976 at hotmail.com>
Date: Sun, 26 Jan 2025 01:30:28 -0500
Subject: [PATCH] [clang][CodeComplete] Use HeuristicResolver to resolve
CXXDependentScopeMemberExpr
---
clang/lib/Sema/SemaCodeComplete.cpp | 21 ++++-----------------
1 file changed, 4 insertions(+), 17 deletions(-)
diff --git a/clang/lib/Sema/SemaCodeComplete.cpp b/clang/lib/Sema/SemaCodeComplete.cpp
index bc0f6a9435f958..ffb4b308e8f1e5 100644
--- a/clang/lib/Sema/SemaCodeComplete.cpp
+++ b/clang/lib/Sema/SemaCodeComplete.cpp
@@ -5796,24 +5796,11 @@ QualType getApproximateType(const Expr *E, HeuristicResolver &Resolver) {
return QualType(Common, 0);
}
}
- // A dependent member: approximate-resolve the base, then lookup.
+ // A dependent member: resolve using HeuristicResolver.
if (const auto *CDSME = llvm::dyn_cast<CXXDependentScopeMemberExpr>(E)) {
- QualType Base = CDSME->isImplicitAccess()
- ? CDSME->getBaseType()
- : getApproximateType(CDSME->getBase(), Resolver);
- if (CDSME->isArrow() && !Base.isNull())
- Base = Base->getPointeeType(); // could handle unique_ptr etc here?
- auto *RD =
- Base.isNull()
- ? nullptr
- : llvm::dyn_cast_or_null<CXXRecordDecl>(getAsRecordDecl(Base));
- if (RD && RD->isCompleteDefinition()) {
- // Look up member heuristically, including in bases.
- for (const auto *Member : RD->lookupDependentName(
- CDSME->getMember(), [](const NamedDecl *Member) {
- return llvm::isa<ValueDecl>(Member);
- })) {
- return llvm::cast<ValueDecl>(Member)->getType().getNonReferenceType();
+ for (const auto *Member : Resolver.resolveMemberExpr(CDSME)) {
+ if (const auto *VD = dyn_cast<ValueDecl>(Member)) {
+ return VD->getType().getNonReferenceType();
}
}
}
More information about the cfe-commits
mailing list