aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Sema/SemaCodeComplete.cpp
diff options
context:
space:
mode:
authorNathan Ridge <zeratul976@hotmail.com>2025-01-22 01:30:28 -0500
committerGitHub <noreply@github.com>2025-01-22 01:30:28 -0500
commit1d23fb976bdcc263c48ed2f5186e5589fca3d267 (patch)
tree2dec5a8faf36b177df05ce36a0e648b733363141 /clang/lib/Sema/SemaCodeComplete.cpp
parent8fad58a6482c300c012ab30105f0ae0118081fcd (diff)
downloadllvm-1d23fb976bdcc263c48ed2f5186e5589fca3d267.zip
llvm-1d23fb976bdcc263c48ed2f5186e5589fca3d267.tar.gz
llvm-1d23fb976bdcc263c48ed2f5186e5589fca3d267.tar.bz2
[clang][CodeComplete] Use HeuristicResolver to resolve pointee types (#121315)
Fixes https://github.com/clangd/clangd/issues/810
Diffstat (limited to 'clang/lib/Sema/SemaCodeComplete.cpp')
-rw-r--r--clang/lib/Sema/SemaCodeComplete.cpp15
1 files changed, 10 insertions, 5 deletions
diff --git a/clang/lib/Sema/SemaCodeComplete.cpp b/clang/lib/Sema/SemaCodeComplete.cpp
index 8a848df..69cda6e 100644
--- a/clang/lib/Sema/SemaCodeComplete.cpp
+++ b/clang/lib/Sema/SemaCodeComplete.cpp
@@ -34,6 +34,7 @@
#include "clang/Sema/CodeCompleteConsumer.h"
#include "clang/Sema/DeclSpec.h"
#include "clang/Sema/Designator.h"
+#include "clang/Sema/HeuristicResolver.h"
#include "clang/Sema/Lookup.h"
#include "clang/Sema/Overload.h"
#include "clang/Sema/ParsedAttr.h"
@@ -5861,8 +5862,10 @@ void SemaCodeCompletion::CodeCompleteMemberReferenceExpr(
enum CodeCompletionContext::Kind contextKind;
if (IsArrow) {
- if (const auto *Ptr = ConvertedBaseType->getAs<PointerType>())
- ConvertedBaseType = Ptr->getPointeeType();
+ if (QualType PointeeType = Resolver.getPointeeType(ConvertedBaseType);
+ !PointeeType.isNull()) {
+ ConvertedBaseType = PointeeType;
+ }
}
if (IsArrow) {
@@ -5899,8 +5902,9 @@ void SemaCodeCompletion::CodeCompleteMemberReferenceExpr(
ExprValueKind BaseKind = Base->getValueKind();
if (IsArrow) {
- if (const PointerType *Ptr = BaseType->getAs<PointerType>()) {
- BaseType = Ptr->getPointeeType();
+ if (QualType PointeeType = Resolver.getPointeeType(BaseType);
+ !PointeeType.isNull()) {
+ BaseType = PointeeType;
BaseKind = VK_LValue;
} else if (BaseType->isObjCObjectPointerType() ||
BaseType->isTemplateTypeParmType()) {
@@ -10472,4 +10476,5 @@ void SemaCodeCompletion::GatherGlobalCodeCompletions(
SemaCodeCompletion::SemaCodeCompletion(Sema &S,
CodeCompleteConsumer *CompletionConsumer)
- : SemaBase(S), CodeCompleter(CompletionConsumer) {}
+ : SemaBase(S), CodeCompleter(CompletionConsumer),
+ Resolver(S.getASTContext()) {}