1 struct Base1 { 2 Base1() : {} 3 // RUN: %clang_cc1 -fsyntax-only -std=c++98 -code-completion-at=%s:2:12 %s -o - | FileCheck -check-prefix=CHECK-CC1 %s 4 // RUN: %clang_cc1 -fsyntax-only -std=c++14 -code-completion-at=%s:2:12 %s -o - | FileCheck -check-prefix=CHECK-CC1 %s 5 // CHECK-CC1: COMPLETION: Pattern : member1(<#int#>) 6 // CHECK-CC1: COMPLETION: Pattern : member2(<#float#>) 7 8 Base1(int) : member1(123), {} 9 // RUN: %clang_cc1 -fsyntax-only -std=c++98 -code-completion-at=%s:8:30 %s -o - | FileCheck -check-prefix=CHECK-CC2 %s 10 // RUN: %clang_cc1 -fsyntax-only -std=c++14 -code-completion-at=%s:8:30 %s -o - | FileCheck -check-prefix=CHECK-CC2 %s 11 // CHECK-CC2-NOT: COMPLETION: Pattern : member1(<#int#>) 12 // CHECK-CC2: COMPLETION: Pattern : member2(<#float#>) 13 14 int member1; 15 float member2; 16 }; 17 18 struct Derived : public Base1 { 19 Derived(); 20 Derived(int); 21 Derived(float); 22 int deriv1; 23 }; 24 25 Derived::Derived() : {} 26 // RUN: %clang_cc1 -fsyntax-only -std=c++98 -code-completion-at=%s:25:22 %s -o - | FileCheck -check-prefix=CHECK-CC3 %s 27 // RUN: %clang_cc1 -fsyntax-only -std=c++14 -code-completion-at=%s:25:22 %s -o - | FileCheck -check-prefix=CHECK-CC3 %s 28 // CHECK-CC3: COMPLETION: Pattern : Base1() 29 // CHECK-CC3: COMPLETION: Pattern : Base1(<#int#>) 30 // CHECK-CC3: COMPLETION: Pattern : deriv1(<#int#>) 31 32 Derived::Derived(int) try : { 33 } catch (...) { 34 } 35 // RUN: %clang_cc1 -fsyntax-only -std=c++98 -code-completion-at=%s:32:29 %s -o - | FileCheck -check-prefix=CHECK-CC3 %s 36 // RUN: %clang_cc1 -fsyntax-only -std=c++14 -code-completion-at=%s:32:29 %s -o - | FileCheck -check-prefix=CHECK-CC3 %s 37 38 Derived::Derived(float) try : Base1(), 39 { 40 } catch (...) { 41 } 42 // RUN: %clang_cc1 -fsyntax-only -std=c++98 -code-completion-at=%s:38:39 %s -o - | FileCheck -check-prefix=CHECK-CC5 %s 43 // RUN: %clang_cc1 -fsyntax-only -std=c++14 -code-completion-at=%s:38:39 %s -o - | FileCheck -check-prefix=CHECK-CC5 %s 44 // CHECK-CC5-NOT: COMPLETION: Pattern : Base1 45 // CHECK-CC5: COMPLETION: Pattern : deriv1(<#int#>) 46 47 struct A { 48 A() : , member2() {} 49 // RUN: %clang_cc1 -fsyntax-only -std=c++98 -code-completion-at=%s:48:9 %s -o - | FileCheck -check-prefix=CHECK-CC6 %s 50 // RUN: %clang_cc1 -fsyntax-only -std=c++14 -code-completion-at=%s:48:9 %s -o - | FileCheck -check-prefix=CHECK-CC6 %s 51 // CHECK-CC6: COMPLETION: Pattern : member1(<#int#>) 52 int member1, member2; 53 }; 54 55 struct B { 56 B() : member2() {} 57 // RUN: %clang_cc1 -fsyntax-only -std=c++98 -code-completion-at=%s:56:9 %s -o - | FileCheck -check-prefix=CHECK-CC7 %s 58 // RUN: %clang_cc1 -fsyntax-only -std=c++14 -code-completion-at=%s:56:9 %s -o - | FileCheck -check-prefix=CHECK-CC7 %s 59 // CHECK-CC7: COMPLETION: Pattern : member1(<#int#>) 60 // Check in the middle and at the end of identifier too. 61 // RUN: %clang_cc1 -fsyntax-only -std=c++98 -code-completion-at=%s:56:13 %s -o - | FileCheck -check-prefix=CHECK-CC8 %s 62 // RUN: %clang_cc1 -fsyntax-only -std=c++98 -code-completion-at=%s:56:16 %s -o - | FileCheck -check-prefix=CHECK-CC8 %s 63 // CHECK-CC8: COMPLETION: Pattern : member2(<#int#>) 64 int member1, member2; 65 }; 66 67 struct Base2 { 68 Base2(int); 69 }; 70 71 struct Composition1 { 72 Composition1() : b2_elem(2) {} 73 // RUN: %clang_cc1 -fsyntax-only -std=c++98 -code-completion-at=%s:72:28 %s -o - | FileCheck -check-prefix=CHECK-CC9 %s 74 // RUN: %clang_cc1 -fsyntax-only -std=c++14 -code-completion-at=%s:72:28 %s -o - | FileCheck -check-prefix=CHECK-CC9 %s 75 // CHECK-CC9: OVERLOAD: Base2(<#int#>) 76 // CHECK-CC9: OVERLOAD: Base2(<#const Base2 &#>) 77 // CHECK-CC9-NOT: OVERLOAD: Composition1 78 Composition1(Base2); 79 Base2 b2_elem; 80 }; 81 82 struct Composition2 { 83 Composition2() : c1_elem(Base2(1)) {} 84 // RUN: %clang_cc1 -fsyntax-only -std=c++98 -code-completion-at=%s:83:34 %s -o - | FileCheck -check-prefix=CHECK-CC9 %s 85 // RUN: %clang_cc1 -fsyntax-only -std=c++14 -code-completion-at=%s:83:34 %s -o - | FileCheck -check-prefix=CHECK-CC9 %s 86 // RUN: %clang_cc1 -fsyntax-only -std=c++98 -code-completion-at=%s:83:35 %s -o - | FileCheck -check-prefix=CHECK-CC9 %s 87 // RUN: %clang_cc1 -fsyntax-only -std=c++14 -code-completion-at=%s:83:35 %s -o - | FileCheck -check-prefix=CHECK-CC9 %s 88 Composition1 c1_elem; 89 }; 90 // RUN: %clang_cc1 -fsyntax-only -std=c++98 -code-completion-at=%s:83:20 %s -o - | FileCheck -check-prefix=CHECK-CC10 %s 91 // RUN: %clang_cc1 -fsyntax-only -std=c++14 -code-completion-at=%s:83:20 %s -o - | FileCheck -check-prefix=CHECK-CC10 %s 92 // CHECK-CC10: Pattern : c1_elem() 93 // CHECK-CC10: Pattern : c1_elem(<#Base2#>) 94 95 template <class T> 96 struct Y : T {}; 97 98 template <class T> 99 struct X : Y<T> { 100 X() : Y<T>() {}; 101 }; 102 103 // RUN: %clang_cc1 -fsyntax-only -std=c++98 -code-completion-at=%s:100:9 %s -o - | FileCheck -check-prefix=CHECK-CC11 %s 104 // RUN: %clang_cc1 -fsyntax-only -std=c++14 -code-completion-at=%s:100:9 %s -o - | FileCheck -check-prefix=CHECK-CC11 %s 105 // CHECK-CC11: Pattern : Y<T>(<#Y<T>#>) 106 107 // Test with incomplete init lists. (Relevant as parsing is *not* cut off). 108 struct Incomplete1 { 109 Incomplete1() : mem 110 111 int member1; 112 int member2; 113 }; 114 // RUN: not %clang_cc1 -fsyntax-only -std=c++14 -code-completion-at=%s:109:19 %s -o - | FileCheck -check-prefix=CHECK-CC12 %s 115 // CHECK-CC12: COMPLETION: Pattern : member1(<#int#>) 116 // CHECK-CC12: COMPLETION: Pattern : member2(<#int#>) 117 118 struct Incomplete2 { 119 Incomplete2() : member2( 120 121 int member1; 122 int member2; 123 }; 124 // RUN: not %clang_cc1 -fsyntax-only -std=c++14 -code-completion-at=%s:119:27 %s -o - | FileCheck -check-prefix=CHECK-CC13 %s 125 // CHECK-CC13: PREFERRED-TYPE: int 126