diff options
author | Nathan Ridge <zeratul976@hotmail.com> | 2025-01-22 01:30:28 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-01-22 01:30:28 -0500 |
commit | 1d23fb976bdcc263c48ed2f5186e5589fca3d267 (patch) | |
tree | 2dec5a8faf36b177df05ce36a0e648b733363141 /clang/lib/Sema/SemaCodeComplete.cpp | |
parent | 8fad58a6482c300c012ab30105f0ae0118081fcd (diff) | |
download | llvm-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.cpp | 15 |
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()) {} |