1RUN: llvm-cxxfilt -n  < %s | FileCheck --match-full-lines %s
2
3CHECK: a::main
4       _RNvC1a4main
5
6CHECK: hello::rust
7       _RNvCshGpAVYOtgW1_5hello4rust
8
9CHECK: a::b::c
10       _RNvNvC1a1b1c
11
12; Closure namespace
13
14CHECK: crate::{closure#0}
15       _RNCC5crate0
16
17CHECK: crate::{closure#1}
18       _RNCC5crates_0
19
20CHECK: crate::{closure:foo#0}
21       _RNCC5crate3foo
22
23CHECK: crate::{closure:foo#1}
24       _RNCC5crates_3foo
25
26; Shim namespace
27
28CHECK: crate::{shim:reify#0}
29       _RNSC5crate5reify
30
31; Unrecognized special namespace
32
33CHECK: crate::{Z:ident#10}
34       _RNZC5crates8_5ident
35
36; Inherent impl
37
38CHECK: <_>
39       _RMC5cratep
40
41CHECK: <_>
42       _RMs_C5cratep
43
44; Trait impl
45
46CHECK: <_ as Clone>
47       _RXC5cratepC5Clone
48
49CHECK: <_ as Clone>
50       _RXs_C5cratepC5Clone
51
52; Trait definition
53
54CHECK: <_ as Ord>
55       _RYpC3Ord
56
57; Generic type arguments
58
59CHECK: generic::<_>
60       _RIC7genericpE
61
62CHECK: generic::<_, _>
63       _RIC7genericppE
64
65CHECK: generic::<_, _, _>
66       _RIC7genericpppE
67
68; Generic const arguments
69
70CHECK: generic_const::<_>
71       _RIC13generic_constKpE
72
73; Generic lifetime arguments
74
75CHECK: generic_lifetime::<'_>
76       _RIC16generic_lifetimeL_E
77
78; Invalid lifetime index.
79
80CHECK: _RIC16generic_lifetimeL0_E
81       _RIC16generic_lifetimeL0_E
82
83; Basic types
84
85CHECK: basic::<i8>
86       _RIC5basicaE
87
88CHECK: basic::<bool>
89       _RIC5basicbE
90
91CHECK: basic::<char>
92       _RIC5basiccE
93
94CHECK: basic::<f64>
95       _RIC5basicdE
96
97CHECK: basic::<str>
98       _RIC5basiceE
99
100CHECK: basic::<f32>
101       _RIC5basicfE
102
103CHECK: basic::<u8>
104       _RIC5basichE
105
106CHECK: basic::<isize>
107       _RIC5basiciE
108
109CHECK: basic::<usize>
110       _RIC5basicjE
111
112CHECK: basic::<i32>
113       _RIC5basiclE
114
115CHECK: basic::<u32>
116       _RIC5basicmE
117
118CHECK: basic::<i128>
119       _RIC5basicnE
120
121CHECK: basic::<u128>
122       _RIC5basicoE
123
124CHECK: basic::<_>
125       _RIC5basicpE
126
127CHECK: basic::<i16>
128       _RIC5basicsE
129
130CHECK: basic::<u16>
131       _RIC5basictE
132
133CHECK: basic::<()>
134       _RIC5basicuE
135
136CHECK: basic::<...>
137       _RIC5basicvE
138
139CHECK: basic::<i64>
140       _RIC5basicxE
141
142CHECK: basic::<u64>
143       _RIC5basicyE
144
145CHECK: basic::<!>
146       _RIC5basiczE
147
148; Named types. Test possible paths productions.
149
150CHECK: named::<name>
151       _RIC5namedC4nameE
152
153CHECK: named::<<_>>
154       _RIC5namedMC5cratepE
155
156CHECK: named::<<_ as Name>>
157       _RIC5namedXC5cratepC4NameE
158
159CHECK: named::<<_ as Name>>
160       _RIC5namedYpC4NameE
161
162CHECK: named::<name::Name>
163       _RIC5namedNvC4name4NameE
164
165CHECK: named::<Name<>>
166       _RIC5namedIC4NameEE
167
168; Types
169
170CHECK: types::<[u8; 0]>
171       _RIC5typesAhj0_E
172
173CHECK: types::<[_]>
174       _RIC5typesSpE
175
176CHECK: types::<()>
177       _RIC5typesTEE
178
179CHECK: types::<(_,)>
180       _RIC5typesTpEE
181
182CHECK: types::<(_, _)>
183       _RIC5typesTppEE
184
185CHECK: types::<(_, _, _)>
186       _RIC5typesTpppEE
187
188CHECK: types::<&_>
189       _RIC5typesRpE
190
191CHECK: types::<&_>
192       _RIC5typesRL_pE
193
194CHECK: types::<&mut _>
195       _RIC5typesQpE
196
197CHECK: types::<&mut _>
198       _RIC5typesQL_pE
199
200CHECK: types::<*const _>
201       _RIC5typesPpE
202
203CHECK: types::<*mut _>
204       _RIC5typesOpE
205
206; Function signatures
207
208CHECK: function::<fn()>
209       _RIC8functionFEuE
210
211CHECK: function::<fn() -> _>
212       _RIC8functionFEpE
213
214CHECK: function::<fn(_)>
215       _RIC8functionFpEuE
216
217CHECK: function::<fn(_, _)>
218       _RIC8functionFppEuE
219
220CHECK: function::<fn(_, _, _)>
221       _RIC8functionFpppEuE
222
223CHECK: function::<unsafe fn()>
224       _RIC8functionFUEuE
225
226CHECK: function::<extern "C" fn()>
227       _RIC8functionFKCEuE
228
229CHECK: function::<extern "cdecl" fn()>
230       _RIC8functionFK5cdeclEuE
231
232CHECK: function::<unsafe extern "C-cmse-nonsecure-call" fn()>
233       _RIC8functionFUK21C_cmse_nonsecure_callEuE
234
235; Binders
236
237CHECK: binders::<for<'a> fn(&'a _)>
238       _RIC7bindersFG_RL0_pEuE
239
240CHECK: binders::<for<'a> fn(&'a mut _)>
241       _RIC7bindersFG_QL0_pEuE
242
243CHECK: binders::<for<'a, 'b> fn(&'a _, &'b _)>
244       _RIC7bindersFG0_RL1_pRL0_pEuE
245
246CHECK: binders::<for<'a, 'b> fn() -> for<'c, 'd> fn(&'a _, &'d _)>
247       _RIC7bindersFG0_EFG0_RL3_pRL0_pEuE
248
249CHECK: binders::<for<'a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, 'i, 'j, 'k, 'l, 'm, 'n, 'o, 'p, 'q, 'r, 's, 't, 'u, 'v, 'w, 'x, 'y, 'z, 'z1, 'z2, 'z3, 'z4> fn(&'a &'b &'c &'d &'e &'f &'g &'h &'i &'j &'k &'l &'m &'n &'o &'p &'q &'r &'s &'t &'u &'v &'w &'x &'y &'z &'z1 &'z2 &'z3 &'z4 ())>
250       _RIC7bindersFGs_RLt_RLs_RLr_RLq_RLp_RLo_RLn_RLm_RLl_RLk_RLj_RLi_RLh_RLg_RLf_RLe_RLd_RLc_RLb_RLa_RL9_RL8_RL7_RL6_RL5_RL4_RL3_RL2_RL1_RL0_uEuE
251
252; Invalid binder. Too many bound lifetimes.
253
254CHECK: _RIC7bindersFGFF_EuE
255       _RIC7bindersFGFF_EuE
256
257; Integer constants. Test value demangling.
258
259CHECK: integer::<0>
260       _RIC7integerKi0_E
261
262CHECK: integer::<1>
263       _RIC7integerKi1_E
264
265CHECK: integer::<-1>
266       _RIC7integerKin1_E
267
268CHECK: integer::<-15>
269       _RIC7integerKinf_E
270
271CHECK: integer::<-16>
272       _RIC7integerKin10_E
273
274CHECK: integer::<18446744073709551615>
275       _RIC7integerKoffffffffffffffff_E
276
277CHECK: integer::<0x10000000000000000>
278       _RIC7integerKo10000000000000000_E
279
280CHECK: integer::<-0x123456789abcdef01>
281       _RIC7integerKnn123456789abcdef01_E
282
283; Invalid integer constant without any digits:
284
285CHECK: _RIC7integerKi_E
286       _RIC7integerKi_E
287
288; Invalid integer constants with insignificant leading zeros:
289
290CHECK: _RIC7integerKi00_E
291       _RIC7integerKi00_E
292
293CHECK: _RIC7integerKi01_E
294       _RIC7integerKi01_E
295
296; Integer constants. Test all integer types.
297
298CHECK: i8::<0>
299       _RIC2i8Ka0_E
300
301CHECK: u8::<0>
302       _RIC2u8Kh0_E
303
304CHECK: isize::<0>
305       _RIC5isizeKi0_E
306
307CHECK: usize::<0>
308       _RIC5usizeKj0_E
309
310CHECK: i32::<0>
311       _RIC3i32Kl0_E
312
313CHECK: u32::<0>
314       _RIC3u32Km0_E
315
316CHECK: i128::<0>
317       _RIC4i128Kn0_E
318
319CHECK: u128::<0>
320       _RIC4u128Ko0_E
321
322CHECK: i16::<0>
323       _RIC3i16Ks0_E
324
325CHECK: u16::<0>
326       _RIC3u16Kt0_E
327
328CHECK: i64::<0>
329       _RIC3i64Kx0_E
330
331CHECK: u64::<0>
332       _RIC3u64Ky0_E
333
334; Bool constants
335
336CHECK: bool::<false>
337       _RIC4boolKb0_E
338
339CHECK: bool::<true>
340       _RIC4boolKb1_E
341
342; Invalid bool constants
343
344CHECK: _RIC4boolKb2_E
345       _RIC4boolKb2_E
346
347CHECK: _RIC4boolKbn0_E
348       _RIC4boolKbn0_E
349
350; Char constants
351
352CHECK: char::<'a'>
353       _RIC4charKc61_E
354
355CHECK: char::<'"'>
356       _RIC4charKc22_E
357
358CHECK: char::<'\t'>
359       _RIC4charKc9_E
360
361CHECK: char::<'\r'>
362       _RIC4charKcd_E
363
364CHECK: char::<'\n'>
365       _RIC4charKca_E
366
367CHECK: char::<'\\'>
368       _RIC4charKc5c_E
369
370CHECK: char::<'\''>
371       _RIC4charKc27_E
372
373CHECK: char::<'\u{1f40d}'>
374       _RIC4charKc1f40d_E
375
376CHECK: char::<'\u{10ffff}'>
377       _RIC4charKc10ffff_E
378
379; Invalid char constants
380
381CHECK: _RIC4charKc1234567_E
382       _RIC4charKc1234567_E
383
384; Invalid mangled characters
385
386CHECK: _RNvC2a.1c
387       _RNvC2a.1c
388
389CHECK: _RNvC2a$1c
390       _RNvC2a$1c
391
392; Invalid namespace (not in [a-zA-Z]).
393
394CHECK: _RN_C5crate4main
395       _RN_C5crate4main
396
397; Invalid identifier length (UINT64_MAX + 3, which happens to be ok after a wraparound).
398
399CHECK: _RNvC2ab18446744073709551618xy
400       _RNvC2ab18446744073709551618xy
401
402; Mangling scheme includes an optional encoding version. When present it would
403; indicate an encoding we don't support yet. Check that it is rejected:
404
405CHECK: _R0NvC1a4main
406       _R0NvC1a4main
407
408; Early EOF
409
410CHECK: _RNv
411       _RNv
412
413CHECK: _RNvC
414       _RNvC
415
416CHECK: _RNvC1a5main
417       _RNvC1a5main
418
419CHECK: _RNvC1a20abc
420       _RNvC1a20abc
421