[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / Demangle / rust.test
blobb5d3a160ff632126d48076128c48a8e4edcc2d82
1 RUN: llvm-cxxfilt -n  < %s | FileCheck --match-full-lines %s
3 CHECK: a::main
4        _RNvC1a4main
6 CHECK: hello::rust
7        _RNvCshGpAVYOtgW1_5hello4rust
9 CHECK: a::b::c
10        _RNvNvC1a1b1c
12 ; Instantiating crate
14 CHECK: crate
15        _RC5crateC3foo
17 ; Closure namespace
19 CHECK: crate::{closure#0}
20        _RNCC5crate0
22 CHECK: crate::{closure#1}
23        _RNCC5crates_0
25 CHECK: crate::{closure:foo#0}
26        _RNCC5crate3foo
28 CHECK: crate::{closure:foo#1}
29        _RNCC5crates_3foo
31 ; Shim namespace
33 CHECK: crate::{shim:reify#0}
34        _RNSC5crate5reify
36 ; Unrecognized special namespace
38 CHECK: crate::{Z:ident#10}
39        _RNZC5crates8_5ident
41 ; Inherent impl
43 CHECK: <_>
44        _RMC5cratep
46 CHECK: <_>
47        _RMs_C5cratep
49 ; Trait impl
51 CHECK: <_ as Clone>
52        _RXC5cratepC5Clone
54 CHECK: <_ as Clone>
55        _RXs_C5cratepC5Clone
57 ; Trait definition
59 CHECK: <_ as Ord>
60        _RYpC3Ord
62 ; Generic type arguments
64 CHECK: generic::<_>
65        _RIC7genericpE
67 CHECK: generic::<_, _>
68        _RIC7genericppE
70 CHECK: generic::<_, _, _>
71        _RIC7genericpppE
73 ; Generic const arguments
75 CHECK: generic_const::<_>
76        _RIC13generic_constKpE
78 ; Generic lifetime arguments
80 CHECK: generic_lifetime::<'_>
81        _RIC16generic_lifetimeL_E
83 ; Invalid lifetime index.
85 CHECK: _RIC16generic_lifetimeL0_E
86        _RIC16generic_lifetimeL0_E
88 ; Basic types
90 CHECK: basic::<i8>
91        _RIC5basicaE
93 CHECK: basic::<bool>
94        _RIC5basicbE
96 CHECK: basic::<char>
97        _RIC5basiccE
99 CHECK: basic::<f64>
100        _RIC5basicdE
102 CHECK: basic::<str>
103        _RIC5basiceE
105 CHECK: basic::<f32>
106        _RIC5basicfE
108 CHECK: basic::<u8>
109        _RIC5basichE
111 CHECK: basic::<isize>
112        _RIC5basiciE
114 CHECK: basic::<usize>
115        _RIC5basicjE
117 CHECK: basic::<i32>
118        _RIC5basiclE
120 CHECK: basic::<u32>
121        _RIC5basicmE
123 CHECK: basic::<i128>
124        _RIC5basicnE
126 CHECK: basic::<u128>
127        _RIC5basicoE
129 CHECK: basic::<_>
130        _RIC5basicpE
132 CHECK: basic::<i16>
133        _RIC5basicsE
135 CHECK: basic::<u16>
136        _RIC5basictE
138 CHECK: basic::<()>
139        _RIC5basicuE
141 CHECK: basic::<...>
142        _RIC5basicvE
144 CHECK: basic::<i64>
145        _RIC5basicxE
147 CHECK: basic::<u64>
148        _RIC5basicyE
150 CHECK: basic::<!>
151        _RIC5basiczE
153 ; Named types. Test possible paths productions.
155 CHECK: named::<name>
156        _RIC5namedC4nameE
158 CHECK: named::<<_>>
159        _RIC5namedMC5cratepE
161 CHECK: named::<<_ as Name>>
162        _RIC5namedXC5cratepC4NameE
164 CHECK: named::<<_ as Name>>
165        _RIC5namedYpC4NameE
167 CHECK: named::<name::Name>
168        _RIC5namedNvC4name4NameE
170 CHECK: named::<Name<>>
171        _RIC5namedIC4NameEE
173 ; Types
175 CHECK: types::<[u8; 0]>
176        _RIC5typesAhj0_E
178 CHECK: types::<[_]>
179        _RIC5typesSpE
181 CHECK: types::<()>
182        _RIC5typesTEE
184 CHECK: types::<(_,)>
185        _RIC5typesTpEE
187 CHECK: types::<(_, _)>
188        _RIC5typesTppEE
190 CHECK: types::<(_, _, _)>
191        _RIC5typesTpppEE
193 CHECK: types::<&_>
194        _RIC5typesRpE
196 CHECK: types::<&_>
197        _RIC5typesRL_pE
199 CHECK: types::<&mut _>
200        _RIC5typesQpE
202 CHECK: types::<&mut _>
203        _RIC5typesQL_pE
205 CHECK: types::<*const _>
206        _RIC5typesPpE
208 CHECK: types::<*mut _>
209        _RIC5typesOpE
211 ; Function signatures
213 CHECK: function::<fn()>
214        _RIC8functionFEuE
216 CHECK: function::<fn() -> _>
217        _RIC8functionFEpE
219 CHECK: function::<fn(_)>
220        _RIC8functionFpEuE
222 CHECK: function::<fn(_, _)>
223        _RIC8functionFppEuE
225 CHECK: function::<fn(_, _, _)>
226        _RIC8functionFpppEuE
228 CHECK: function::<unsafe fn()>
229        _RIC8functionFUEuE
231 CHECK: function::<extern "C" fn()>
232        _RIC8functionFKCEuE
234 CHECK: function::<extern "cdecl" fn()>
235        _RIC8functionFK5cdeclEuE
237 CHECK: function::<unsafe extern "C-cmse-nonsecure-call" fn()>
238        _RIC8functionFUK21C_cmse_nonsecure_callEuE
240 ; Trait objects
242 CHECK: trait::<dyn >
243        _RIC5traitDEL_E
245 CHECK: trait::<dyn for<'a> >
246        _RIC5traitDG_EL_E
248 CHECK: trait::<for<'a> fn(dyn for<'b> + 'a)>
249        _RIC5traitFG_DG_EL0_EuE
251 CHECK: trait::<dyn Display>
252        _RIC5traitDC7DisplayEL_E
254 CHECK: trait::<dyn Display + Send + Sync>
255        _RIC5traitDC7DisplayC4SendC4SyncEL_E
257 CHECK: trait::<dyn for<'a> Display>
258        _RIC5traitDG_C7DisplayEL_E
260 CHECK: trait::<dyn IntoIterator<_, Item = _>>
261        _RIC5traitDIC12IntoIteratorpEp4ItempEL_E
263 CHECK: trait::<dyn IntoIterator<Item = _>>
264        _RIC5traitDC12IntoIteratorp4ItempEL_E
266 CHECK: trait::<dyn IntoIterator<Item = _, IntoIter = _>>
267        _RIC5traitDC12IntoIteratorp4Itempp8IntoIterpEL_E
269 ; Invalid trait object, missing lifetime.
271 CHECK: _RIC5traitDEE
272        _RIC5traitDEE
274 ; Binders
276 CHECK: binders::<for<'a> fn(&'a _)>
277        _RIC7bindersFG_RL0_pEuE
279 CHECK: binders::<for<'a> fn(&'a mut _)>
280        _RIC7bindersFG_QL0_pEuE
282 CHECK: binders::<for<'a, 'b> fn(&'a _, &'b _)>
283        _RIC7bindersFG0_RL1_pRL0_pEuE
285 CHECK: binders::<for<'a, 'b> fn() -> for<'c, 'd> fn(&'a _, &'d _)>
286        _RIC7bindersFG0_EFG0_RL3_pRL0_pEuE
288 CHECK: 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 ())>
289        _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
291 ; Invalid binder. Too many bound lifetimes.
293 CHECK: _RIC7bindersFGFF_EuE
294        _RIC7bindersFGFF_EuE
296 ; Integer constants. Test value demangling.
298 CHECK: integer::<0>
299        _RIC7integerKi0_E
301 CHECK: integer::<1>
302        _RIC7integerKi1_E
304 CHECK: integer::<-1>
305        _RIC7integerKin1_E
307 CHECK: integer::<-15>
308        _RIC7integerKinf_E
310 CHECK: integer::<-16>
311        _RIC7integerKin10_E
313 CHECK: integer::<18446744073709551615>
314        _RIC7integerKoffffffffffffffff_E
316 CHECK: integer::<0x10000000000000000>
317        _RIC7integerKo10000000000000000_E
319 CHECK: integer::<-0x123456789abcdef01>
320        _RIC7integerKnn123456789abcdef01_E
322 ; Invalid integer constant without any digits:
324 CHECK: _RIC7integerKi_E
325        _RIC7integerKi_E
327 ; Invalid integer constants with insignificant leading zeros:
329 CHECK: _RIC7integerKi00_E
330        _RIC7integerKi00_E
332 CHECK: _RIC7integerKi01_E
333        _RIC7integerKi01_E
335 ; Integer constants. Test all integer types.
337 CHECK: i8::<0>
338        _RIC2i8Ka0_E
340 CHECK: u8::<0>
341        _RIC2u8Kh0_E
343 CHECK: isize::<0>
344        _RIC5isizeKi0_E
346 CHECK: usize::<0>
347        _RIC5usizeKj0_E
349 CHECK: i32::<0>
350        _RIC3i32Kl0_E
352 CHECK: u32::<0>
353        _RIC3u32Km0_E
355 CHECK: i128::<0>
356        _RIC4i128Kn0_E
358 CHECK: u128::<0>
359        _RIC4u128Ko0_E
361 CHECK: i16::<0>
362        _RIC3i16Ks0_E
364 CHECK: u16::<0>
365        _RIC3u16Kt0_E
367 CHECK: i64::<0>
368        _RIC3i64Kx0_E
370 CHECK: u64::<0>
371        _RIC3u64Ky0_E
373 ; Bool constants
375 CHECK: bool::<false>
376        _RIC4boolKb0_E
378 CHECK: bool::<true>
379        _RIC4boolKb1_E
381 ; Invalid bool constants
383 CHECK: _RIC4boolKb2_E
384        _RIC4boolKb2_E
386 CHECK: _RIC4boolKbn0_E
387        _RIC4boolKbn0_E
389 ; Char constants
391 CHECK: char::<'a'>
392        _RIC4charKc61_E
394 CHECK: char::<'"'>
395        _RIC4charKc22_E
397 CHECK: char::<'\t'>
398        _RIC4charKc9_E
400 CHECK: char::<'\r'>
401        _RIC4charKcd_E
403 CHECK: char::<'\n'>
404        _RIC4charKca_E
406 CHECK: char::<'\\'>
407        _RIC4charKc5c_E
409 CHECK: char::<'\''>
410        _RIC4charKc27_E
412 CHECK: char::<'\u{1f40d}'>
413        _RIC4charKc1f40d_E
415 CHECK: char::<'\u{10ffff}'>
416        _RIC4charKc10ffff_E
418 ; Invalid char constants
420 CHECK: _RIC4charKc1234567_E
421        _RIC4charKc1234567_E
423 ; Backreferences
425 CHECK: backref::<backref::ident>
426        _RIC7backrefNvB0_5identE
428 CHECK: backref::<(), ()>
429        _RIC7backrefuB9_E
431 CHECK: backref::<7, 7>
432        _RIC7backrefKi7_KBa_E
434 ; Invalid backreferences
436 CHECK: _RB_
437        _RB_
439 CHECK: _RB5_
440        _RB5_
442 CHECK: _RNvB_1a
443        _RNvB_1a
445 CHECK: _RIC7backrefSB9_E
446        _RIC7backrefSB9_E
448 CHECK: _RIC7backrefKBa_E
449        _RIC7backrefKBa_E
451 ; Dot suffix
453 CHECK: dot (.llvm.1234)
454        _RC3dot.llvm.1234
456 CHECK: dot (.llvm.6789)
457        _RC3dotC5crate.llvm.6789
459 ; Invalid mangled characters
461 CHECK: _RNvC2a.1c
462        _RNvC2a.1c
464 CHECK: _RNvC2a$1c
465        _RNvC2a$1c
467 ; Invalid namespace (not in [a-zA-Z]).
469 CHECK: _RN_C5crate4main
470        _RN_C5crate4main
472 ; Invalid identifier length (UINT64_MAX + 3, which happens to be ok after a wraparound).
474 CHECK: _RNvC2ab18446744073709551618xy
475        _RNvC2ab18446744073709551618xy
477 ; Mangling scheme includes an optional encoding version. When present it would
478 ; indicate an encoding we don't support yet. Check that it is rejected:
480 CHECK: _R0NvC1a4main
481        _R0NvC1a4main
483 ; Early EOF
485 CHECK: _RNv
486        _RNv
488 CHECK: _RNvC
489        _RNvC
491 CHECK: _RNvC1a5main
492        _RNvC1a5main
494 CHECK: _RNvC1a20abc
495        _RNvC1a20abc