[clang] [CodeComplete] Don't drop ArrayToPointerDecay when doing member completion (PR #134951)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Apr 9 10:52:43 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Akira Hatanaka (ahatanak)
<details>
<summary>Changes</summary>
Fixes https://github.com/llvm/llvm-project/issues/123146.
rdar://138851576
---
Full diff: https://github.com/llvm/llvm-project/pull/134951.diff
2 Files Affected:
- (modified) clang/lib/Sema/SemaCodeComplete.cpp (+4-1)
- (modified) clang/test/CodeCompletion/member-access.c (+9)
``````````diff
diff --git a/clang/lib/Sema/SemaCodeComplete.cpp b/clang/lib/Sema/SemaCodeComplete.cpp
index 44a49a6e3148e..bd1fd4dae68a3 100644
--- a/clang/lib/Sema/SemaCodeComplete.cpp
+++ b/clang/lib/Sema/SemaCodeComplete.cpp
@@ -5740,7 +5740,10 @@ class ConceptInfo {
QualType getApproximateType(const Expr *E, HeuristicResolver &Resolver) {
if (E->getType().isNull())
return QualType();
- E = E->IgnoreParenImpCasts();
+ // Don't drop implicit cast if it's an array decay.
+ if (auto *ICE = dyn_cast<ImplicitCastExpr>(E);
+ !ICE || ICE->getCastKind() != CK_ArrayToPointerDecay)
+ E = E->IgnoreParenImpCasts();
QualType Unresolved = E->getType();
// Resolve DependentNameType
if (const auto *DNT = Unresolved->getAs<DependentNameType>()) {
diff --git a/clang/test/CodeCompletion/member-access.c b/clang/test/CodeCompletion/member-access.c
index fc54993152815..f08d1957fb90a 100644
--- a/clang/test/CodeCompletion/member-access.c
+++ b/clang/test/CodeCompletion/member-access.c
@@ -36,3 +36,12 @@ void test4(struct Point *p) {
}
// RUN: %clang_cc1 -fsyntax-only -code-completion-with-fixits -code-completion-at=%s:%(line-3):13 %s -o - | FileCheck -check-prefix=CHECK-CC1 %s
// RUN: %clang_cc1 -fsyntax-only -code-completion-with-fixits -code-completion-at=%s:%(line-3):23 %s -o - | FileCheck -check-prefix=CHECK-CC1 %s
+
+float test5(void) {
+ struct Point array[4];
+ return array->x;
+}
+// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-2):17 %s -o - | FileCheck -check-prefix=CHECK-CC4 %s
+// CHECK-CC4: COMPLETION: x : [#float#]x
+// CHECK-CC4: COMPLETION: y : [#float#]y
+// CHECK-CC4: COMPLETION: z : [#float#]z
``````````
</details>
https://github.com/llvm/llvm-project/pull/134951
More information about the cfe-commits
mailing list