1f9e890cbSOlivier Goffart struct Base1 {
Base1Base12f9e890cbSOlivier Goffart   Base1() : {}
33cd10137SOlivier Goffart   // RUN: %clang_cc1 -fsyntax-only -std=c++98 -code-completion-at=%s:2:12 %s -o - | FileCheck -check-prefix=CHECK-CC1 %s
43cd10137SOlivier Goffart   // RUN: %clang_cc1 -fsyntax-only -std=c++14 -code-completion-at=%s:2:12 %s -o - | FileCheck -check-prefix=CHECK-CC1 %s
5fabaaaaaSKadir Cetinkaya   // CHECK-CC1: COMPLETION: Pattern : member1(<#int#>)
6fabaaaaaSKadir Cetinkaya   // CHECK-CC1: COMPLETION: Pattern : member2(<#float#>)
7f9e890cbSOlivier Goffart 
Base1Base18f9e890cbSOlivier Goffart   Base1(int) : member1(123), {}
93cd10137SOlivier Goffart   // RUN: %clang_cc1 -fsyntax-only -std=c++98 -code-completion-at=%s:8:30 %s -o - | FileCheck -check-prefix=CHECK-CC2 %s
103cd10137SOlivier Goffart   // RUN: %clang_cc1 -fsyntax-only -std=c++14 -code-completion-at=%s:8:30 %s -o - | FileCheck -check-prefix=CHECK-CC2 %s
11fabaaaaaSKadir Cetinkaya   // CHECK-CC2-NOT: COMPLETION: Pattern : member1(<#int#>)
12fabaaaaaSKadir Cetinkaya   // CHECK-CC2: COMPLETION: Pattern : member2(<#float#>)
13f9e890cbSOlivier Goffart 
14f9e890cbSOlivier Goffart   int member1;
15f9e890cbSOlivier Goffart   float member2;
16f9e890cbSOlivier Goffart };
17f9e890cbSOlivier Goffart 
18f9e890cbSOlivier Goffart struct Derived : public Base1 {
19f9e890cbSOlivier Goffart   Derived();
20f9e890cbSOlivier Goffart   Derived(int);
21f9e890cbSOlivier Goffart   Derived(float);
22f9e890cbSOlivier Goffart   int deriv1;
23f9e890cbSOlivier Goffart };
24f9e890cbSOlivier Goffart 
Derived()25f9e890cbSOlivier Goffart Derived::Derived() : {}
263cd10137SOlivier Goffart // RUN: %clang_cc1 -fsyntax-only -std=c++98 -code-completion-at=%s:25:22 %s -o - | FileCheck -check-prefix=CHECK-CC3 %s
273cd10137SOlivier Goffart // RUN: %clang_cc1 -fsyntax-only -std=c++14 -code-completion-at=%s:25:22 %s -o - | FileCheck -check-prefix=CHECK-CC3 %s
28fabaaaaaSKadir Cetinkaya // CHECK-CC3: COMPLETION: Pattern : Base1()
29fabaaaaaSKadir Cetinkaya // CHECK-CC3: COMPLETION: Pattern : Base1(<#int#>)
30fabaaaaaSKadir Cetinkaya // CHECK-CC3: COMPLETION: Pattern : deriv1(<#int#>)
31f9e890cbSOlivier Goffart 
Derived(int)32f9e890cbSOlivier Goffart Derived::Derived(int) try : {
33f9e890cbSOlivier Goffart } catch (...) {
34f9e890cbSOlivier Goffart }
35fabaaaaaSKadir Cetinkaya // RUN: %clang_cc1 -fsyntax-only -std=c++98 -code-completion-at=%s:32:29 %s -o - | FileCheck -check-prefix=CHECK-CC3 %s
36fabaaaaaSKadir Cetinkaya // RUN: %clang_cc1 -fsyntax-only -std=c++14 -code-completion-at=%s:32:29 %s -o - | FileCheck -check-prefix=CHECK-CC3 %s
37f9e890cbSOlivier Goffart 
Derived(float)38f9e890cbSOlivier Goffart Derived::Derived(float) try : Base1(),
39f9e890cbSOlivier Goffart {
40f9e890cbSOlivier Goffart } catch (...) {
41f9e890cbSOlivier Goffart }
42fabaaaaaSKadir Cetinkaya // RUN: %clang_cc1 -fsyntax-only -std=c++98 -code-completion-at=%s:38:39 %s -o - | FileCheck -check-prefix=CHECK-CC5 %s
43fabaaaaaSKadir Cetinkaya // RUN: %clang_cc1 -fsyntax-only -std=c++14 -code-completion-at=%s:38:39 %s -o - | FileCheck -check-prefix=CHECK-CC5 %s
44fabaaaaaSKadir Cetinkaya // CHECK-CC5-NOT: COMPLETION: Pattern : Base1
45fabaaaaaSKadir Cetinkaya // CHECK-CC5: COMPLETION: Pattern : deriv1(<#int#>)
463cd10137SOlivier Goffart 
473cd10137SOlivier Goffart struct A {
AA483cd10137SOlivier Goffart   A() : , member2() {}
49fabaaaaaSKadir Cetinkaya   // RUN: %clang_cc1 -fsyntax-only -std=c++98 -code-completion-at=%s:48:9 %s -o - | FileCheck -check-prefix=CHECK-CC6 %s
50fabaaaaaSKadir Cetinkaya   // RUN: %clang_cc1 -fsyntax-only -std=c++14 -code-completion-at=%s:48:9 %s -o - | FileCheck -check-prefix=CHECK-CC6 %s
51fabaaaaaSKadir Cetinkaya   // CHECK-CC6: COMPLETION: Pattern : member1(<#int#>)
523cd10137SOlivier Goffart   int member1, member2;
533cd10137SOlivier Goffart };
543cd10137SOlivier Goffart 
553cd10137SOlivier Goffart struct B {
BB563cd10137SOlivier Goffart   B() : member2() {}
57fabaaaaaSKadir Cetinkaya   // RUN: %clang_cc1 -fsyntax-only -std=c++98 -code-completion-at=%s:56:9 %s -o - | FileCheck -check-prefix=CHECK-CC7 %s
58fabaaaaaSKadir Cetinkaya   // RUN: %clang_cc1 -fsyntax-only -std=c++14 -code-completion-at=%s:56:9 %s -o - | FileCheck -check-prefix=CHECK-CC7 %s
59fabaaaaaSKadir Cetinkaya   // CHECK-CC7: COMPLETION: Pattern : member1(<#int#>)
60ef4ece75SIlya Biryukov   // Check in the middle and at the end of identifier too.
61fabaaaaaSKadir Cetinkaya   // RUN: %clang_cc1 -fsyntax-only -std=c++98 -code-completion-at=%s:56:13 %s -o - | FileCheck -check-prefix=CHECK-CC8 %s
62fabaaaaaSKadir Cetinkaya   // RUN: %clang_cc1 -fsyntax-only -std=c++98 -code-completion-at=%s:56:16 %s -o - | FileCheck -check-prefix=CHECK-CC8 %s
63fabaaaaaSKadir Cetinkaya   // CHECK-CC8: COMPLETION: Pattern : member2(<#int#>)
643cd10137SOlivier Goffart   int member1, member2;
653cd10137SOlivier Goffart };
6684774c3aSKadir Cetinkaya 
6784774c3aSKadir Cetinkaya struct Base2 {
6884774c3aSKadir Cetinkaya   Base2(int);
6984774c3aSKadir Cetinkaya };
7084774c3aSKadir Cetinkaya 
7184774c3aSKadir Cetinkaya struct Composition1 {
Composition1Composition172fabaaaaaSKadir Cetinkaya   Composition1() : b2_elem(2) {}
73fabaaaaaSKadir Cetinkaya   // RUN: %clang_cc1 -fsyntax-only -std=c++98 -code-completion-at=%s:72:28 %s -o - | FileCheck -check-prefix=CHECK-CC9 %s
74fabaaaaaSKadir Cetinkaya   // RUN: %clang_cc1 -fsyntax-only -std=c++14 -code-completion-at=%s:72:28 %s -o - | FileCheck -check-prefix=CHECK-CC9 %s
7584774c3aSKadir Cetinkaya   // CHECK-CC9: OVERLOAD: Base2(<#int#>)
7684774c3aSKadir Cetinkaya   // CHECK-CC9: OVERLOAD: Base2(<#const Base2 &#>)
7784774c3aSKadir Cetinkaya   // CHECK-CC9-NOT: OVERLOAD: Composition1
7884774c3aSKadir Cetinkaya   Composition1(Base2);
7984774c3aSKadir Cetinkaya   Base2 b2_elem;
8084774c3aSKadir Cetinkaya };
8184774c3aSKadir Cetinkaya 
8284774c3aSKadir Cetinkaya struct Composition2 {
Composition2Composition28384774c3aSKadir Cetinkaya   Composition2() : c1_elem(Base2(1)) {}
84fabaaaaaSKadir Cetinkaya   // RUN: %clang_cc1 -fsyntax-only -std=c++98 -code-completion-at=%s:83:34 %s -o - | FileCheck -check-prefix=CHECK-CC9 %s
85fabaaaaaSKadir Cetinkaya   // RUN: %clang_cc1 -fsyntax-only -std=c++14 -code-completion-at=%s:83:34 %s -o - | FileCheck -check-prefix=CHECK-CC9 %s
86fabaaaaaSKadir Cetinkaya   // RUN: %clang_cc1 -fsyntax-only -std=c++98 -code-completion-at=%s:83:35 %s -o - | FileCheck -check-prefix=CHECK-CC9 %s
87fabaaaaaSKadir Cetinkaya   // RUN: %clang_cc1 -fsyntax-only -std=c++14 -code-completion-at=%s:83:35 %s -o - | FileCheck -check-prefix=CHECK-CC9 %s
8884774c3aSKadir Cetinkaya   Composition1 c1_elem;
8984774c3aSKadir Cetinkaya };
90fabaaaaaSKadir Cetinkaya // RUN: %clang_cc1 -fsyntax-only -std=c++98 -code-completion-at=%s:83:20 %s -o - | FileCheck -check-prefix=CHECK-CC10 %s
91fabaaaaaSKadir Cetinkaya // RUN: %clang_cc1 -fsyntax-only -std=c++14 -code-completion-at=%s:83:20 %s -o - | FileCheck -check-prefix=CHECK-CC10 %s
92fabaaaaaSKadir Cetinkaya // CHECK-CC10: Pattern : c1_elem()
93fabaaaaaSKadir Cetinkaya // CHECK-CC10: Pattern : c1_elem(<#Base2#>)
94fabaaaaaSKadir Cetinkaya 
95fabaaaaaSKadir Cetinkaya template <class T>
96fabaaaaaSKadir Cetinkaya struct Y : T {};
97fabaaaaaSKadir Cetinkaya 
98fabaaaaaSKadir Cetinkaya template <class T>
99fabaaaaaSKadir Cetinkaya struct X : Y<T> {
XX100fabaaaaaSKadir Cetinkaya   X() : Y<T>() {};
101fabaaaaaSKadir Cetinkaya };
102fabaaaaaSKadir Cetinkaya 
103fabaaaaaSKadir Cetinkaya // RUN: %clang_cc1 -fsyntax-only -std=c++98 -code-completion-at=%s:100:9 %s -o - | FileCheck -check-prefix=CHECK-CC11 %s
104fabaaaaaSKadir Cetinkaya // RUN: %clang_cc1 -fsyntax-only -std=c++14 -code-completion-at=%s:100:9 %s -o - | FileCheck -check-prefix=CHECK-CC11 %s
105fabaaaaaSKadir Cetinkaya // CHECK-CC11: Pattern : Y<T>(<#Y<T>#>)
106*d8716cd7SSam McCall 
107*d8716cd7SSam McCall // Test with incomplete init lists. (Relevant as parsing is *not* cut off).
108*d8716cd7SSam McCall struct Incomplete1 {
109*d8716cd7SSam McCall   Incomplete1() : mem
110*d8716cd7SSam McCall 
111*d8716cd7SSam McCall   int member1;
112*d8716cd7SSam McCall   int member2;
113*d8716cd7SSam McCall };
114*d8716cd7SSam McCall // RUN: not %clang_cc1 -fsyntax-only -std=c++14 -code-completion-at=%s:109:19 %s -o - | FileCheck -check-prefix=CHECK-CC12 %s
115*d8716cd7SSam McCall // CHECK-CC12: COMPLETION: Pattern : member1(<#int#>)
116*d8716cd7SSam McCall // CHECK-CC12: COMPLETION: Pattern : member2(<#int#>)
117*d8716cd7SSam McCall 
118*d8716cd7SSam McCall struct Incomplete2 {
119*d8716cd7SSam McCall   Incomplete2() : member2(
120*d8716cd7SSam McCall 
121*d8716cd7SSam McCall   int member1;
122*d8716cd7SSam McCall   int member2;
123*d8716cd7SSam McCall };
124*d8716cd7SSam McCall // RUN: not %clang_cc1 -fsyntax-only -std=c++14 -code-completion-at=%s:119:27 %s -o - | FileCheck -check-prefix=CHECK-CC13 %s
125*d8716cd7SSam McCall // CHECK-CC13: PREFERRED-TYPE: int
126