blob: 34c3bf96a9d536b9b85f65cb03d72e65489f592c [file] [log] [blame]
Charles Li430db1e2015-08-27 18:49:15 +00001struct X { int x; };
2void z(int);
3typedef struct t TYPEDEF;
4
5void foo() {
6 int y = 17;
7 // RUN: %clang_cc1 -fsyntax-only -fcxx-exceptions -code-completion-patterns -code-completion-at=%s:6:14 -std=gnu++11 %s -o - | FileCheck -check-prefix=CHECK-CC1 %s
8 // CHECK-CC1: COMPLETION: bool
9 // CHECK-CC1-NEXT: COMPLETION: char
10 // CHECK-CC1-NEXT: COMPLETION: char16
11 // CHECK-CC1-NEXT: COMPLETION: char32
12 // CHECK-CC1-NEXT: COMPLETION: class
13 // CHECK-CC1-NEXT: COMPLETION: const
14 // CHECK-CC1-NEXT: COMPLETION: Pattern : const_cast<<#type#>>(<#expression#>)
15 // CHECK-CC1: COMPLETION: Pattern : [#void#]delete <#expression#>
16 // CHECK-CC1-NEXT: COMPLETION: Pattern : [#void#]delete [] <#expression#>
17 // CHECK-CC1-NEXT: COMPLETION: Pattern : do{<#statements#>
18 // CHECK-CC1: COMPLETION: double
19 // CHECK-CC1-NEXT: COMPLETION: Pattern : dynamic_cast<<#type#>>(<#expression#>)
20 // CHECK-CC1-NEXT: COMPLETION: enum
21 // CHECK-CC1-NEXT: COMPLETION: extern
22 // CHECK-CC1-NEXT: COMPLETION: Pattern : [#bool#]false
23 // CHECK-CC1-NEXT: COMPLETION: float
24 // CHECK-CC1-NEXT: COMPLETION: foo : [#void#]foo()
25 // CHECK-CC1-NEXT: COMPLETION: Pattern : for(<#init-statement#>;<#condition#>;<#inc-expression#>){
26 // CHECK-CC1: COMPLETION: Pattern : goto <#label#>
27 // CHECK-CC1-NEXT: COMPLETION: Pattern : if(<#condition#>){<#statements#>
28 // CHECK-CC1: COMPLETION: int
29 // CHECK-CC1-NEXT: COMPLETION: long
30 // CHECK-CC1-NEXT: COMPLETION: Pattern : new <#type#>(<#expressions#>)
31 // CHECK-CC1-NEXT: COMPLETION: Pattern : new <#type#>[<#size#>](<#expressions#>)
32 // CHECK-CC1-NEXT: COMPLETION: Pattern : [#bool#]noexcept(<#expression#>)
33 // CHECK-CC1-NEXT: COMPLETION: Pattern : [#std::nullptr_t#]nullptr
34 // CHECK-CC1-NEXT: COMPLETION: operator
35 // CHECK-CC1-NEXT: COMPLETION: Pattern : reinterpret_cast<<#type#>>(<#expression#>)
36 // CHECK-CC1-NEXT: COMPLETION: Pattern : return
37 // CHECK-CC1-NEXT: COMPLETION: short
38 // CHECK-CC1-NEXT: COMPLETION: signed
39 // CHECK-CC1-NEXT: COMPLETION: Pattern : [#size_t#]sizeof(<#expression-or-type#>)
40 // CHECK-CC1-NEXT: COMPLETION: Pattern : [#size_t#]sizeof...(<#parameter-pack#>)
41 // CHECK-CC1-NEXT: COMPLETION: static
Alex Lorenz8f4d3992017-02-13 23:19:40 +000042 // CHECK-CC1-NEXT: COMPLETION: Pattern : static_assert(<#expression#>, <#message#>)
Charles Li430db1e2015-08-27 18:49:15 +000043 // CHECK-CC1-NEXT: COMPLETION: Pattern : static_cast<<#type#>>(<#expression#>)
44 // CHECK-CC1-NEXT: COMPLETION: struct
45 // CHECK-CC1-NEXT: COMPLETION: Pattern : switch(<#condition#>){
46 // CHECK-CC1: COMPLETION: t : t
Alex Lorenz8f4d3992017-02-13 23:19:40 +000047 // CHECK-CC1-NEXT: COMPLETION: thread_local
Charles Li430db1e2015-08-27 18:49:15 +000048 // CHECK-CC1-NEXT: COMPLETION: Pattern : [#void#]throw <#expression#>
49 // CHECK-CC1-NEXT: COMPLETION: Pattern : [#bool#]true
50 // CHECK-CC1-NEXT: COMPLETION: Pattern : try{<#statements#>
51 // CHECK-CC1: COMPLETION: TYPEDEF : TYPEDEF
52 // CHECK-CC1-NEXT: COMPLETION: Pattern : typedef <#type#> <#name#>
53 // CHECK-CC1-NEXT: COMPLETION: Pattern : [#std::type_info#]typeid(<#expression-or-type#>)
54 // CHECK-CC1-NEXT: COMPLETION: Pattern : typename <#qualifier#>::<#name#>
55 // CHECK-CC1-NEXT: COMPLETION: Pattern : typeof <#expression#>
56 // CHECK-CC1-NEXT: COMPLETION: Pattern : typeof(<#type#>)
57 // CHECK-CC1-NEXT: COMPLETION: union
58 // CHECK-CC1-NEXT: COMPLETION: unsigned
59 // CHECK-CC1-NEXT: COMPLETION: Pattern : using namespace <#identifier#>
60 // CHECK-CC1-NEXT: COMPLETION: void
61 // CHECK-CC1-NEXT: COMPLETION: volatile
62 // CHECK-CC1-NEXT: COMPLETION: wchar_t
63 // CHECK-CC1-NEXT: COMPLETION: Pattern : while(<#condition#>){<#statements#>
64 // CHECK-CC1: COMPLETION: X : X
65 // CHECK-CC1-NEXT: COMPLETION: y : [#int#]y
66 // CHECK-CC1-NEXT: COMPLETION: z : [#void#]z(<#int#>)
67
68 // RUN: %clang_cc1 -fsyntax-only -code-completion-patterns -code-completion-at=%s:4:1 -std=gnu++11 %s -o - | FileCheck -check-prefix=CHECK-CC2 %s
69 // CHECK-CC2: COMPLETION: Pattern : asm(<#string-literal#>)
70 // CHECK-CC2: COMPLETION: auto
71 // CHECK-CC2-NEXT: COMPLETION: bool
72 // CHECK-CC2-NEXT: COMPLETION: char
73 // CHECK-CC2-NEXT: COMPLETION: char16
74 // CHECK-CC2-NEXT: COMPLETION: char32
75 // CHECK-CC2-NEXT: COMPLETION: class
76 // CHECK-CC2-NEXT: COMPLETION: const
Alex Lorenz8f4d3992017-02-13 23:19:40 +000077 // CHECK-CC2-NEXT: COMPLETION: constexpr
Charles Li430db1e2015-08-27 18:49:15 +000078 // CHECK-CC2-NEXT: COMPLETION: Pattern : decltype(<#expression#>)
79 // CHECK-CC2-NEXT: COMPLETION: double
80 // CHECK-CC2-NEXT: COMPLETION: enum
81 // CHECK-CC2-NEXT: COMPLETION: extern
82 // CHECK-CC2-NEXT: COMPLETION: float
83 // CHECK-CC2-NEXT: COMPLETION: inline
84 // CHECK-CC2-NEXT: COMPLETION: int
85 // CHECK-CC2-NEXT: COMPLETION: long
86 // CHECK-CC2-NEXT: COMPLETION: Pattern : namespace <#identifier#>{<#declarations#>
87 // CHECK-CC2: COMPLETION: Pattern : namespace <#name#> = <#namespace#>
88 // CHECK-CC2-NEXT: COMPLETION: operator
89 // CHECK-CC2-NEXT: COMPLETION: short
90 // CHECK-CC2-NEXT: COMPLETION: signed
91 // CHECK-CC2-NEXT: COMPLETION: static
Alex Lorenz8f4d3992017-02-13 23:19:40 +000092 // CHECK-CC2-NEXT: COMPLETION: Pattern : static_assert(<#expression#>, <#message#>)
Charles Li430db1e2015-08-27 18:49:15 +000093 // CHECK-CC2-NEXT: COMPLETION: struct
94 // CHECK-CC2-NEXT: COMPLETION: t : t
95 // CHECK-CC2-NEXT: COMPLETION: Pattern : template <#declaration#>
96 // CHECK-CC2-NEXT: COMPLETION: Pattern : template<<#parameters#>>
Alex Lorenz8f4d3992017-02-13 23:19:40 +000097 // CHECK-CC2-NEXT: COMPLETION: thread_local
Charles Li430db1e2015-08-27 18:49:15 +000098 // CHECK-CC2-NEXT: COMPLETION: TYPEDEF : TYPEDEF
99 // CHECK-CC2-NEXT: COMPLETION: Pattern : typedef <#type#> <#name#>
100 // CHECK-CC2-NEXT: COMPLETION: Pattern : typename <#qualifier#>::<#name#>
101 // CHECK-CC2-NEXT: COMPLETION: Pattern : typeof <#expression#>
102 // CHECK-CC2-NEXT: COMPLETION: Pattern : typeof(<#type#>)
103 // CHECK-CC2-NEXT: COMPLETION: union
104 // CHECK-CC2-NEXT: COMPLETION: unsigned
105 // CHECK-CC2-NEXT: COMPLETION: Pattern : using namespace <#identifier#>
106 // CHECK-CC2-NEXT: COMPLETION: Pattern : using <#qualifier#>::<#name#>
107 // CHECK-CC2-NEXT: COMPLETION: void
108 // CHECK-CC2-NEXT: COMPLETION: volatile
109 // CHECK-CC2-NEXT: COMPLETION: wchar_t
110 // CHECK-CC2-NEXT: COMPLETION: X : X
111
112 // RUN: %clang_cc1 -fsyntax-only -code-completion-patterns -code-completion-at=%s:1:19 -std=gnu++11 %s -o - | FileCheck -check-prefix=CHECK-CC3 %s
113 // CHECK-CC3: COMPLETION: bool
114 // CHECK-CC3-NEXT: COMPLETION: char
115 // CHECK-CC3-NEXT: COMPLETION: char16_t
116 // CHECK-CC3-NEXT: COMPLETION: char32_t
117 // CHECK-CC3-NEXT: COMPLETION: class
118 // CHECK-CC3-NEXT: COMPLETION: const
Alex Lorenz8f4d3992017-02-13 23:19:40 +0000119 // CHECK-CC3-NEXT: COMPLETION: constexpr
Charles Li430db1e2015-08-27 18:49:15 +0000120 // CHECK-CC3-NEXT: COMPLETION: Pattern : decltype(<#expression#>)
121 // CHECK-CC3-NEXT: COMPLETION: double
122 // CHECK-CC3-NEXT: COMPLETION: enum
123 // CHECK-CC3-NEXT: COMPLETION: explicit
124 // CHECK-CC3-NEXT: COMPLETION: extern
125 // CHECK-CC3-NEXT: COMPLETION: float
126 // CHECK-CC3-NEXT: COMPLETION: friend
127 // CHECK-CC3-NEXT: COMPLETION: inline
128 // CHECK-CC3-NEXT: COMPLETION: int
129 // CHECK-CC3-NEXT: COMPLETION: long
130 // CHECK-CC3-NEXT: COMPLETION: mutable
131 // CHECK-CC3-NEXT: COMPLETION: operator
132 // CHECK-CC3-NEXT: COMPLETION: Pattern : private:
133 // CHECK-CC3-NEXT: COMPLETION: Pattern : protected:
134 // CHECK-CC3-NEXT: COMPLETION: Pattern : public:
135 // CHECK-CC3-NEXT: COMPLETION: short
136 // CHECK-CC3-NEXT: COMPLETION: signed
137 // CHECK-CC3-NEXT: COMPLETION: static
Alex Lorenz8f4d3992017-02-13 23:19:40 +0000138 // CHECK-CC3-NEXT: COMPLETION: Pattern : static_assert(<#expression#>, <#message#>)
Charles Li430db1e2015-08-27 18:49:15 +0000139 // CHECK-CC3-NEXT: COMPLETION: struct
140 // CHECK-CC3-NEXT: COMPLETION: Pattern : template<<#parameters#>>
Alex Lorenz8f4d3992017-02-13 23:19:40 +0000141 // CHECK-CC3-NEXT: COMPLETION: thread_local
Charles Li430db1e2015-08-27 18:49:15 +0000142 // CHECK-CC3-NEXT: COMPLETION: Pattern : typedef <#type#> <#name#>
143 // CHECK-CC3-NEXT: COMPLETION: Pattern : typename <#qualifier#>::<#name#>
144 // CHECK-CC3-NEXT: COMPLETION: Pattern : typeof <#expression#>
145 // CHECK-CC3-NEXT: COMPLETION: Pattern : typeof(<#type#>)
146 // CHECK-CC3-NEXT: COMPLETION: union
147 // CHECK-CC3-NEXT: COMPLETION: unsigned
148 // CHECK-CC3-NEXT: COMPLETION: Pattern : using <#qualifier#>::<#name#>
149 // CHECK-CC3-NEXT: COMPLETION: virtual
150 // CHECK-CC3-NEXT: COMPLETION: void
151 // CHECK-CC3-NEXT: COMPLETION: volatile
152 // CHECK-CC3-NEXT: COMPLETION: wchar_t
153 // CHECK-CC3-NEXT: COMPLETION: X : X
154
155 // RUN: %clang_cc1 -fsyntax-only -fcxx-exceptions -code-completion-patterns -code-completion-at=%s:6:11 -std=gnu++11 %s -o - | FileCheck -check-prefix=CHECK-CC4 %s
156 // CHECK-CC4: COMPLETION: bool
157 // CHECK-CC4-NEXT: COMPLETION: char
158 // CHECK-CC4-NEXT: COMPLETION: char16_t
159 // CHECK-CC4-NEXT: COMPLETION: char32_t
160 // CHECK-CC4-NEXT: COMPLETION: class
161 // CHECK-CC4-NEXT: COMPLETION: const
162 // CHECK-CC4-NEXT: COMPLETION: Pattern : const_cast<<#type#>>(<#expression#>)
163 // CHECK-CC4-NEXT: COMPLETION: Pattern : decltype(<#expression#>)
164 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#void#]delete <#expression#>
165 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#void#]delete [] <#expression#>
166 // CHECK-CC4-NEXT: COMPLETION: double
167 // CHECK-CC4-NEXT: COMPLETION: Pattern : dynamic_cast<<#type#>>(<#expression#>)
168 // CHECK-CC4-NEXT: COMPLETION: enum
169 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#bool#]false
170 // CHECK-CC4-NEXT: COMPLETION: float
171 // CHECK-CC4-NEXT: COMPLETION: foo : [#void#]foo()
172 // CHECK-CC4-NEXT: COMPLETION: int
173 // CHECK-CC4-NEXT: COMPLETION: long
174 // CHECK-CC4-NEXT: COMPLETION: Pattern : new <#type#>(<#expressions#>)
175 // CHECK-CC4-NEXT: COMPLETION: Pattern : new <#type#>[<#size#>](<#expressions#>)
176 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#bool#]noexcept(<#expression#>)
177 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#std::nullptr_t#]nullptr
178 // CHECK-CC4-NEXT: COMPLETION: operator
179 // CHECK-CC4-NEXT: COMPLETION: Pattern : reinterpret_cast<<#type#>>(<#expression#>)
180 // CHECK-CC4-NEXT: COMPLETION: short
181 // CHECK-CC4-NEXT: COMPLETION: signed
182 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#size_t#]sizeof(<#expression-or-type#>)
183 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#size_t#]sizeof...(<#parameter-pack#>)
184 // CHECK-CC4-NEXT: COMPLETION: Pattern : static_cast<<#type#>>(<#expression#>)
185 // CHECK-CC4-NEXT: COMPLETION: struct
186 // CHECK-CC4-NEXT: COMPLETION: t : t
187 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#void#]throw <#expression#>
188 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#bool#]true
189 // CHECK-CC4-NEXT: COMPLETION: TYPEDEF : TYPEDEF
190 // CHECK-CC4-NEXT: COMPLETION: Pattern : [#std::type_info#]typeid(<#expression-or-type#>)
191 // CHECK-CC4-NEXT: COMPLETION: Pattern : typename <#qualifier#>::<#name#>
192 // CHECK-CC4-NEXT: COMPLETION: Pattern : typeof <#expression#>
193 // CHECK-CC4-NEXT: COMPLETION: Pattern : typeof(<#type#>)
194 // CHECK-CC4-NEXT: COMPLETION: union
195 // CHECK-CC4-NEXT: COMPLETION: unsigned
196 // CHECK-CC4-NEXT: COMPLETION: void
197 // CHECK-CC4-NEXT: COMPLETION: volatile
198 // CHECK-CC4-NEXT: COMPLETION: wchar_t
199 // CHECK-CC4-NEXT: COMPLETION: X : X
200 // CHECK-CC4-NEXT: COMPLETION: y : [#int#]y
201 // CHECK-CC4-NEXT: COMPLETION: z : [#void#]z(<#int#>)
202
203 // RUN: %clang_cc1 -fsyntax-only -fno-rtti -code-completion-patterns -code-completion-at=%s:6:14 -std=gnu++11 %s -o - | FileCheck -check-prefix=CHECK-NO-RTTI %s
204 // CHECK-NO-RTTI: COMPLETION: bool
205 // CHECK-NO-RTTI-NEXT: COMPLETION: char
206 // CHECK-NO-RTTI-NEXT: COMPLETION: char16_t
207 // CHECK-NO-RTTI-NEXT: COMPLETION: char32_t
208 // CHECK-NO-RTTI-NEXT: COMPLETION: class
209 // CHECK-NO-RTTI-NEXT: COMPLETION: const
210 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : const_cast<<#type#>>(<#expression#>)
211 // CHECK-NO-RTTI: COMPLETION: Pattern : [#void#]delete <#expression#>
212 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : [#void#]delete [] <#expression#>
213 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : do{<#statements#>
214 // CHECK-NO-RTTI: COMPLETION: double
215 // CHECK-NO-RTTI-NOT: dynamic_cast
216 // CHECK-NO-RTTI: COMPLETION: enum
217 // CHECK-NO-RTTI-NEXT: COMPLETION: extern
218 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : [#bool#]false
219 // CHECK-NO-RTTI-NEXT: COMPLETION: float
220 // CHECK-NO-RTTI-NEXT: COMPLETION: foo : [#void#]foo()
221 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : for(<#init-statement#>;<#condition#>;<#inc-expression#>){
222 // CHECK-NO-RTTI: COMPLETION: Pattern : goto <#label#>
223 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : if(<#condition#>){<#statements#>
224 // CHECK-NO-RTTI: COMPLETION: int
225 // CHECK-NO-RTTI-NEXT: COMPLETION: long
226 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : new <#type#>(<#expressions#>)
227 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : new <#type#>[<#size#>](<#expressions#>)
228 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : [#bool#]noexcept(<#expression#>)
229 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : [#std::nullptr_t#]nullptr
230 // CHECK-NO-RTTI-NEXT: COMPLETION: operator
231 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : reinterpret_cast<<#type#>>(<#expression#>)
232 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : return
233 // CHECK-NO-RTTI-NEXT: COMPLETION: short
234 // CHECK-NO-RTTI-NEXT: COMPLETION: signed
235 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : [#size_t#]sizeof(<#expression-or-type#>)
236 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : [#size_t#]sizeof...(<#parameter-pack#>)
237 // CHECK-NO-RTTI-NEXT: COMPLETION: static
Alex Lorenz8f4d3992017-02-13 23:19:40 +0000238 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : static_assert(<#expression#>, <#message#>)
Charles Li430db1e2015-08-27 18:49:15 +0000239 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : static_cast<<#type#>>(<#expression#>)
240 // CHECK-NO-RTTI-NEXT: COMPLETION: struct
241 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : switch(<#condition#>){
242 // CHECK-NO-RTTI: COMPLETION: t : t
243 // CHECK-NO-RTTI-NOT: throw
244 // CHECK-NO-RTTI: COMPLETION: Pattern : [#bool#]true
245 // CHECK-NO-RTTI-NOT: try
246 // CHECK-NO-RTTI: COMPLETION: TYPEDEF : TYPEDEF
247 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : typedef <#type#> <#name#>
248 // CHECK-NO-RTTI-NOT: typeid
249 // CHECK-NO-RTTI: COMPLETION: Pattern : typename <#qualifier#>::<#name#>
250 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : typeof <#expression#>
251 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : typeof(<#type#>)
252 // CHECK-NO-RTTI-NEXT: COMPLETION: union
253 // CHECK-NO-RTTI-NEXT: COMPLETION: unsigned
254 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : using namespace <#identifier#>
255 // CHECK-NO-RTTI-NEXT: COMPLETION: void
256 // CHECK-NO-RTTI-NEXT: COMPLETION: volatile
257 // CHECK-NO-RTTI-NEXT: COMPLETION: wchar_t
258 // CHECK-NO-RTTI-NEXT: COMPLETION: Pattern : while(<#condition#>){<#statements#>
259 // CHECK-NO-RTTI: COMPLETION: X : X
260 // CHECK-NO-RTTI-NEXT: COMPLETION: y : [#int#]y
261 // CHECK-NO-RTTI-NEXT: COMPLETION: z : [#void#]z(<#int#>)