Author: Akira Hatanaka
Date: 2025-04-15T10:12:18-07:00
New Revision: 3192ecfa89a48b5f56ff36956abe7e84327ced5d

URL: 
https://github.com/llvm/llvm-project/commit/3192ecfa89a48b5f56ff36956abe7e84327ced5d
DIFF: 
https://github.com/llvm/llvm-project/commit/3192ecfa89a48b5f56ff36956abe7e84327ced5d.diff

LOG: [CodeComplete] Don't drop ArrayToPointerDecay when doing member completion 
(#134951)

Fixes https://github.com/llvm/llvm-project/issues/123146.

rdar://138851576

Added: 
    

Modified: 
    clang/lib/Sema/SemaCodeComplete.cpp
    clang/test/CodeCompletion/member-access.c

Removed: 
    


################################################################################
diff  --git a/clang/lib/Sema/SemaCodeComplete.cpp 
b/clang/lib/Sema/SemaCodeComplete.cpp
index 793ffb6a00b86..f6ec4cb0f069e 100644
--- a/clang/lib/Sema/SemaCodeComplete.cpp
+++ b/clang/lib/Sema/SemaCodeComplete.cpp
@@ -5726,7 +5726,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


        
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to