xref: /llvm-project/llvm/test/Demangle/rust.test (revision c8c2b4629f7597ac16102dab6150da14d68167de)
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; Instantiating crate
13
14CHECK: crate
15       _RC5crateC3foo
16
17; Closure namespace
18
19CHECK: crate::{closure#0}
20       _RNCC5crate0
21
22CHECK: crate::{closure#1}
23       _RNCC5crates_0
24
25CHECK: crate::{closure:foo#0}
26       _RNCC5crate3foo
27
28CHECK: crate::{closure:foo#1}
29       _RNCC5crates_3foo
30
31; Shim namespace
32
33CHECK: crate::{shim:reify#0}
34       _RNSC5crate5reify
35
36; Unrecognized special namespace
37
38CHECK: crate::{Z:ident#10}
39       _RNZC5crates8_5ident
40
41; Inherent impl
42
43CHECK: <_>
44       _RMC5cratep
45
46CHECK: <_>
47       _RMs_C5cratep
48
49; Trait impl
50
51CHECK: <_ as Clone>
52       _RXC5cratepC5Clone
53
54CHECK: <_ as Clone>
55       _RXs_C5cratepC5Clone
56
57; Trait definition
58
59CHECK: <_ as Ord>
60       _RYpC3Ord
61
62; Generic type arguments
63
64CHECK: generic::<_>
65       _RIC7genericpE
66
67CHECK: generic::<_, _>
68       _RIC7genericppE
69
70CHECK: generic::<_, _, _>
71       _RIC7genericpppE
72
73; Generic const arguments
74
75CHECK: generic_const::<_>
76       _RIC13generic_constKpE
77
78; Generic lifetime arguments
79
80CHECK: generic_lifetime::<'_>
81       _RIC16generic_lifetimeL_E
82
83; Invalid lifetime index.
84
85CHECK: _RIC16generic_lifetimeL0_E
86       _RIC16generic_lifetimeL0_E
87
88; Basic types
89
90CHECK: basic::<i8>
91       _RIC5basicaE
92
93CHECK: basic::<bool>
94       _RIC5basicbE
95
96CHECK: basic::<char>
97       _RIC5basiccE
98
99CHECK: basic::<f64>
100       _RIC5basicdE
101
102CHECK: basic::<str>
103       _RIC5basiceE
104
105CHECK: basic::<f32>
106       _RIC5basicfE
107
108CHECK: basic::<u8>
109       _RIC5basichE
110
111CHECK: basic::<isize>
112       _RIC5basiciE
113
114CHECK: basic::<usize>
115       _RIC5basicjE
116
117CHECK: basic::<i32>
118       _RIC5basiclE
119
120CHECK: basic::<u32>
121       _RIC5basicmE
122
123CHECK: basic::<i128>
124       _RIC5basicnE
125
126CHECK: basic::<u128>
127       _RIC5basicoE
128
129CHECK: basic::<_>
130       _RIC5basicpE
131
132CHECK: basic::<i16>
133       _RIC5basicsE
134
135CHECK: basic::<u16>
136       _RIC5basictE
137
138CHECK: basic::<()>
139       _RIC5basicuE
140
141CHECK: basic::<...>
142       _RIC5basicvE
143
144CHECK: basic::<i64>
145       _RIC5basicxE
146
147CHECK: basic::<u64>
148       _RIC5basicyE
149
150CHECK: basic::<!>
151       _RIC5basiczE
152
153; Named types. Test possible paths productions.
154
155CHECK: named::<name>
156       _RIC5namedC4nameE
157
158CHECK: named::<<_>>
159       _RIC5namedMC5cratepE
160
161CHECK: named::<<_ as Name>>
162       _RIC5namedXC5cratepC4NameE
163
164CHECK: named::<<_ as Name>>
165       _RIC5namedYpC4NameE
166
167CHECK: named::<name::Name>
168       _RIC5namedNvC4name4NameE
169
170CHECK: named::<Name<>>
171       _RIC5namedIC4NameEE
172
173; Types
174
175CHECK: types::<[u8; 0]>
176       _RIC5typesAhj0_E
177
178CHECK: types::<[_]>
179       _RIC5typesSpE
180
181CHECK: types::<()>
182       _RIC5typesTEE
183
184CHECK: types::<(_,)>
185       _RIC5typesTpEE
186
187CHECK: types::<(_, _)>
188       _RIC5typesTppEE
189
190CHECK: types::<(_, _, _)>
191       _RIC5typesTpppEE
192
193CHECK: types::<&_>
194       _RIC5typesRpE
195
196CHECK: types::<&_>
197       _RIC5typesRL_pE
198
199CHECK: types::<&mut _>
200       _RIC5typesQpE
201
202CHECK: types::<&mut _>
203       _RIC5typesQL_pE
204
205CHECK: types::<*const _>
206       _RIC5typesPpE
207
208CHECK: types::<*mut _>
209       _RIC5typesOpE
210
211; Function signatures
212
213CHECK: function::<fn()>
214       _RIC8functionFEuE
215
216CHECK: function::<fn() -> _>
217       _RIC8functionFEpE
218
219CHECK: function::<fn(_)>
220       _RIC8functionFpEuE
221
222CHECK: function::<fn(_, _)>
223       _RIC8functionFppEuE
224
225CHECK: function::<fn(_, _, _)>
226       _RIC8functionFpppEuE
227
228CHECK: function::<unsafe fn()>
229       _RIC8functionFUEuE
230
231CHECK: function::<extern "C" fn()>
232       _RIC8functionFKCEuE
233
234CHECK: function::<extern "cdecl" fn()>
235       _RIC8functionFK5cdeclEuE
236
237CHECK: function::<unsafe extern "C-cmse-nonsecure-call" fn()>
238       _RIC8functionFUK21C_cmse_nonsecure_callEuE
239
240; Invalid ABI with punycode.
241
242CHECK: _RIC8functionFKu3n3hEuE
243       _RIC8functionFKu3n3hEuE
244
245; Trait objects
246
247CHECK: trait::<dyn >
248       _RIC5traitDEL_E
249
250CHECK: trait::<dyn for<'a> >
251       _RIC5traitDG_EL_E
252
253CHECK: trait::<for<'a> fn(dyn for<'b> + 'a)>
254       _RIC5traitFG_DG_EL0_EuE
255
256CHECK: trait::<dyn Display>
257       _RIC5traitDC7DisplayEL_E
258
259CHECK: trait::<dyn Display + Send + Sync>
260       _RIC5traitDC7DisplayC4SendC4SyncEL_E
261
262CHECK: trait::<dyn for<'a> Display>
263       _RIC5traitDG_C7DisplayEL_E
264
265CHECK: trait::<dyn IntoIterator<_, Item = _>>
266       _RIC5traitDIC12IntoIteratorpEp4ItempEL_E
267
268CHECK: trait::<dyn IntoIterator<Item = _>>
269       _RIC5traitDC12IntoIteratorp4ItempEL_E
270
271CHECK: trait::<dyn IntoIterator<Item = _, IntoIter = _>>
272       _RIC5traitDC12IntoIteratorp4Itempp8IntoIterpEL_E
273
274; Invalid trait object, missing lifetime.
275
276CHECK: _RIC5traitDEE
277       _RIC5traitDEE
278
279; Binders
280
281CHECK: binders::<for<'a> fn(&'a _)>
282       _RIC7bindersFG_RL0_pEuE
283
284CHECK: binders::<for<'a> fn(&'a mut _)>
285       _RIC7bindersFG_QL0_pEuE
286
287CHECK: binders::<for<'a, 'b> fn(&'a _, &'b _)>
288       _RIC7bindersFG0_RL1_pRL0_pEuE
289
290CHECK: binders::<for<'a, 'b> fn() -> for<'c, 'd> fn(&'a _, &'d _)>
291       _RIC7bindersFG0_EFG0_RL3_pRL0_pEuE
292
293CHECK: 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 ())>
294       _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
295
296; Invalid binder. Too many bound lifetimes.
297
298CHECK: _RIC7bindersFGFF_EuE
299       _RIC7bindersFGFF_EuE
300
301; Integer constants. Test value demangling.
302
303CHECK: integer::<0>
304       _RIC7integerKi0_E
305
306CHECK: integer::<1>
307       _RIC7integerKi1_E
308
309CHECK: integer::<-1>
310       _RIC7integerKin1_E
311
312CHECK: integer::<-15>
313       _RIC7integerKinf_E
314
315CHECK: integer::<-16>
316       _RIC7integerKin10_E
317
318CHECK: integer::<18446744073709551615>
319       _RIC7integerKoffffffffffffffff_E
320
321CHECK: integer::<0x10000000000000000>
322       _RIC7integerKo10000000000000000_E
323
324CHECK: integer::<-0x123456789abcdef01>
325       _RIC7integerKnn123456789abcdef01_E
326
327; Invalid integer constant without any digits:
328
329CHECK: _RIC7integerKi_E
330       _RIC7integerKi_E
331
332; Invalid integer constants with insignificant leading zeros:
333
334CHECK: _RIC7integerKi00_E
335       _RIC7integerKi00_E
336
337CHECK: _RIC7integerKi01_E
338       _RIC7integerKi01_E
339
340; Integer constants. Test all integer types.
341
342CHECK: i8::<0>
343       _RIC2i8Ka0_E
344
345CHECK: u8::<0>
346       _RIC2u8Kh0_E
347
348CHECK: isize::<0>
349       _RIC5isizeKi0_E
350
351CHECK: usize::<0>
352       _RIC5usizeKj0_E
353
354CHECK: i32::<0>
355       _RIC3i32Kl0_E
356
357CHECK: u32::<0>
358       _RIC3u32Km0_E
359
360CHECK: i128::<0>
361       _RIC4i128Kn0_E
362
363CHECK: u128::<0>
364       _RIC4u128Ko0_E
365
366CHECK: i16::<0>
367       _RIC3i16Ks0_E
368
369CHECK: u16::<0>
370       _RIC3u16Kt0_E
371
372CHECK: i64::<0>
373       _RIC3i64Kx0_E
374
375CHECK: u64::<0>
376       _RIC3u64Ky0_E
377
378; Bool constants
379
380CHECK: bool::<false>
381       _RIC4boolKb0_E
382
383CHECK: bool::<true>
384       _RIC4boolKb1_E
385
386; Invalid bool constants
387
388CHECK: _RIC4boolKb2_E
389       _RIC4boolKb2_E
390
391CHECK: _RIC4boolKbn0_E
392       _RIC4boolKbn0_E
393
394; Char constants
395
396CHECK: char::<'a'>
397       _RIC4charKc61_E
398
399CHECK: char::<'"'>
400       _RIC4charKc22_E
401
402CHECK: char::<'\t'>
403       _RIC4charKc9_E
404
405CHECK: char::<'\r'>
406       _RIC4charKcd_E
407
408CHECK: char::<'\n'>
409       _RIC4charKca_E
410
411CHECK: char::<'\\'>
412       _RIC4charKc5c_E
413
414CHECK: char::<'\''>
415       _RIC4charKc27_E
416
417CHECK: char::<'\u{1f40d}'>
418       _RIC4charKc1f40d_E
419
420CHECK: char::<'\u{10ffff}'>
421       _RIC4charKc10ffff_E
422
423; Invalid char constants
424
425CHECK: _RIC4charKc1234567_E
426       _RIC4charKc1234567_E
427
428; Backreferences
429
430CHECK: backref::<backref::ident>
431       _RIC7backrefNvB0_5identE
432
433CHECK: backref::<(), ()>
434       _RIC7backrefuB9_E
435
436CHECK: backref::<7, 7>
437       _RIC7backrefKi7_KBa_E
438
439; Invalid backreferences
440
441CHECK: _RB_
442       _RB_
443
444CHECK: _RB5_
445       _RB5_
446
447CHECK: _RNvB_1a
448       _RNvB_1a
449
450CHECK: _RIC7backrefSB9_E
451       _RIC7backrefSB9_E
452
453CHECK: _RIC7backrefKBa_E
454       _RIC7backrefKBa_E
455
456; Dot suffix
457
458CHECK: dot (.llvm.1234)
459       _RC3dot.llvm.1234
460
461CHECK: dot (.llvm.6789)
462       _RC3dotC5crate.llvm.6789
463
464; Punycode
465
466CHECK: punycode::東京
467       _RNvC8punycodeu7_1lqs71d
468
469CHECK: punycode::zażółć_gęślą_jaźń
470       _RNvC8punycodeu29za_gl_ja_w3a7psa2tqtgb10airva
471
472CHECK: punycode::საჭმელად_გემრიელი_სადილი
473       _RNvC8punycodeu30____7hkackfecea1cbdathfdh9hlq6y
474
475CHECK: Gödel::Escher::Bach
476       _RNtNvCu8Gdel_5qa6Escher4Bach
477
478CHECK: punycode::����
479       _RNvC8punycodeu7wn8hx1g
480
481; Punycode - invalid code point
482
483CHECK: _RCu5r731r
484       _RCu5r731r
485
486CHECK: _RCu8b44444yy
487       _RCu8b44444yy
488
489CHECK: _RNvC1au25zzzzzzzzzzzzzzzzzzzzzzzzz
490       _RNvC1au25zzzzzzzzzzzzzzzzzzzzzzzzz
491
492; Punycode - early EOF
493
494CHECK: _RCu8_CCCAR_u4
495       _RCu8_CCCAR_u4
496
497; Punycode - overflow
498
499CHECK: _RNvC1au21p18888888888888888888
500       _RNvC1au21p18888888888888888888
501
502; Invalid mangled characters
503
504CHECK: _RNvC2a.1c
505       _RNvC2a.1c
506
507CHECK: _RNvC2a$1c
508       _RNvC2a$1c
509
510; Invalid namespace (not in [a-zA-Z]).
511
512CHECK: _RN_C5crate4main
513       _RN_C5crate4main
514
515; Invalid identifier length (UINT64_MAX + 3, which happens to be ok after a wraparound).
516
517CHECK: _RNvC2ab18446744073709551618xy
518       _RNvC2ab18446744073709551618xy
519
520; Mangling scheme includes an optional encoding version. When present it would
521; indicate an encoding we don't support yet. Check that it is rejected:
522
523CHECK: _R0NvC1a4main
524       _R0NvC1a4main
525
526; Early EOF
527
528CHECK: _RNv
529       _RNv
530
531CHECK: _RNvC
532       _RNvC
533
534CHECK: _RNvC1a5main
535       _RNvC1a5main
536
537CHECK: _RNvC1a20abc
538       _RNvC1a20abc
539