================ @@ -42,7 +42,77 @@ int func3() { int func4() { // TODO (&A::foo)( - (&A::bar)( + (&A::bar)() } // RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-2):13 -std=c++23 %s | FileCheck -check-prefix=CHECK-CC5 %s // CHECK-CC5: OVERLOAD: [#void#](<#A#>, int) + +struct S { + void foo1(int a); + void foo2(int a) const; + void foo2(this const S& self, float a); + void foo3(this const S& self, int a); + void foo4(this S& self, int a); +}; + +void S::foo1(int a) { + this->; +// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-1):9 -std=c++23 %s | FileCheck -check-prefix=CHECK-CC6 %s +// CHECK-CC6: COMPLETION: foo1 : [#void#]foo1(<#int a#>) +// CHECK-CC6: COMPLETION: foo2 : [#void#]foo2(<#int a#>)[# const#] +// CHECK-CC6: COMPLETION: foo2 : [#void#]foo2(<#float a#>)[# const#] +// CHECK-CC6: COMPLETION: foo3 : [#void#]foo3(<#int a#>)[# const#] +// CHECK-CC6: COMPLETION: foo4 : [#void#]foo4(<#int a#>) +} + +void S::foo2(int a) const { + this->; +// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-1):9 -std=c++23 %s | FileCheck -check-prefix=CHECK-CC7 %s +// CHECK-CC7: COMPLETION: foo2 : [#void#]foo2(<#int a#>)[# const#] +// CHECK-CC7: COMPLETION: foo2 : [#void#]foo2(<#float a#>)[# const#] +// CHECK-CC7: COMPLETION: foo3 : [#void#]foo3(<#int a#>)[# const#] +} + +void S::foo3(this const S& self, int a) { + self.; +// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-1):8 -std=c++23 %s | FileCheck -check-prefix=CHECK-CC8 %s +// CHECK-CC8: COMPLETION: foo2 : [#void#]foo2(<#int a#>)[# const#] +// CHECK-CC8: COMPLETION: foo2 : [#void#]foo2(<#float a#>)[# const#] +// CHECK-CC8: COMPLETION: foo3 : [#void#]foo3(<#int a#>)[# const#] +} + +void S::foo4(this S& self, int a) { + self.; +// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-1):8 -std=c++23 %s | FileCheck -check-prefix=CHECK-CC9 %s +// CHECK-CC9: COMPLETION: foo1 : [#void#]foo1(<#int a#>) +// CHECK-CC9: COMPLETION: foo2 : [#void#]foo2(<#int a#>)[# const#] +// CHECK-CC9: COMPLETION: foo2 : [#void#]foo2(<#float a#>)[# const#] +// CHECK-CC9: COMPLETION: foo3 : [#void#]foo3(<#int a#>)[# const#] +// CHECK-CC9: COMPLETION: foo4 : [#void#]foo4(<#int a#>) +} + +void test1(S s) { + s.; +// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-1):5 -std=c++23 %s | FileCheck -check-prefix=CHECK-CC10 %s +// CHECK-CC10: COMPLETION: foo1 : [#void#]foo1(<#int a#>) +// CHECK-CC10: COMPLETION: foo2 : [#void#]foo2(<#int a#>)[# const#] +// CHECK-CC10: COMPLETION: foo2 : [#void#]foo2(<#float a#>)[# const#] +// CHECK-CC10: COMPLETION: foo3 : [#void#]foo3(<#int a#>)[# const#] +// CHECK-CC10: COMPLETION: foo4 : [#void#]foo4(<#int a#>) +} + +void test2(const S s) { + s.; +// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-1):5 -std=c++23 %s | FileCheck -check-prefix=CHECK-CC11 %s +// CHECK-CC11: COMPLETION: foo2 : [#void#]foo2(<#int a#>)[# const#] +// CHECK-CC11: COMPLETION: foo2 : [#void#]foo2(<#float a#>)[# const#] +// CHECK-CC11: COMPLETION: foo3 : [#void#]foo3(<#int a#>)[# const#] +} + +void test3(S s) { + s.foo2(); +// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:%(line-1):10 -std=c++23 %s | FileCheck -check-prefix=CHECK-CC12 %s +// CHECK-CC12: OVERLOAD: [#void#]foo2(<#int a#>) +// CHECK-CC12: OVERLOAD: [#void#]foo2(float a) +// TODO: foo2 should be OVERLOAD: [#void#]foo2(<#float a#>) ---------------- MythreyaK wrote:
Need to check why `foo2` is broken. But autocomplete seems to work fine :thinking: ``` foo2(float a) vs [incorrect?] foo2(<#float a#>) [expected?] ``` https://github.com/llvm/llvm-project/pull/154041 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits