1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-26 12:43:36 +01:00
llvm-mirror/test/Demangle/rust.test
Tomasz Miąsko da9f3ec14e [Demangle][Rust] Parse dot suffix
Allow mangled names to include an arbitrary dot suffix, akin to vendor
specific suffix in Itanium mangling.

Primary motivation is a support for symbols renamed during ThinLTO
import / promotion (ThinLTO is the default configuration for optimized
builds in rustc).

Reviewed By: dblaikie

Differential Revision: https://reviews.llvm.org/D104358
2021-06-18 09:29:45 +02:00

496 lines
8.5 KiB
Plaintext

RUN: llvm-cxxfilt -n < %s | FileCheck --match-full-lines %s
CHECK: a::main
_RNvC1a4main
CHECK: hello::rust
_RNvCshGpAVYOtgW1_5hello4rust
CHECK: a::b::c
_RNvNvC1a1b1c
; Instantiating crate
CHECK: crate
_RC5crateC3foo
; Closure namespace
CHECK: crate::{closure#0}
_RNCC5crate0
CHECK: crate::{closure#1}
_RNCC5crates_0
CHECK: crate::{closure:foo#0}
_RNCC5crate3foo
CHECK: crate::{closure:foo#1}
_RNCC5crates_3foo
; Shim namespace
CHECK: crate::{shim:reify#0}
_RNSC5crate5reify
; Unrecognized special namespace
CHECK: crate::{Z:ident#10}
_RNZC5crates8_5ident
; Inherent impl
CHECK: <_>
_RMC5cratep
CHECK: <_>
_RMs_C5cratep
; Trait impl
CHECK: <_ as Clone>
_RXC5cratepC5Clone
CHECK: <_ as Clone>
_RXs_C5cratepC5Clone
; Trait definition
CHECK: <_ as Ord>
_RYpC3Ord
; Generic type arguments
CHECK: generic::<_>
_RIC7genericpE
CHECK: generic::<_, _>
_RIC7genericppE
CHECK: generic::<_, _, _>
_RIC7genericpppE
; Generic const arguments
CHECK: generic_const::<_>
_RIC13generic_constKpE
; Generic lifetime arguments
CHECK: generic_lifetime::<'_>
_RIC16generic_lifetimeL_E
; Invalid lifetime index.
CHECK: _RIC16generic_lifetimeL0_E
_RIC16generic_lifetimeL0_E
; Basic types
CHECK: basic::<i8>
_RIC5basicaE
CHECK: basic::<bool>
_RIC5basicbE
CHECK: basic::<char>
_RIC5basiccE
CHECK: basic::<f64>
_RIC5basicdE
CHECK: basic::<str>
_RIC5basiceE
CHECK: basic::<f32>
_RIC5basicfE
CHECK: basic::<u8>
_RIC5basichE
CHECK: basic::<isize>
_RIC5basiciE
CHECK: basic::<usize>
_RIC5basicjE
CHECK: basic::<i32>
_RIC5basiclE
CHECK: basic::<u32>
_RIC5basicmE
CHECK: basic::<i128>
_RIC5basicnE
CHECK: basic::<u128>
_RIC5basicoE
CHECK: basic::<_>
_RIC5basicpE
CHECK: basic::<i16>
_RIC5basicsE
CHECK: basic::<u16>
_RIC5basictE
CHECK: basic::<()>
_RIC5basicuE
CHECK: basic::<...>
_RIC5basicvE
CHECK: basic::<i64>
_RIC5basicxE
CHECK: basic::<u64>
_RIC5basicyE
CHECK: basic::<!>
_RIC5basiczE
; Named types. Test possible paths productions.
CHECK: named::<name>
_RIC5namedC4nameE
CHECK: named::<<_>>
_RIC5namedMC5cratepE
CHECK: named::<<_ as Name>>
_RIC5namedXC5cratepC4NameE
CHECK: named::<<_ as Name>>
_RIC5namedYpC4NameE
CHECK: named::<name::Name>
_RIC5namedNvC4name4NameE
CHECK: named::<Name<>>
_RIC5namedIC4NameEE
; Types
CHECK: types::<[u8; 0]>
_RIC5typesAhj0_E
CHECK: types::<[_]>
_RIC5typesSpE
CHECK: types::<()>
_RIC5typesTEE
CHECK: types::<(_,)>
_RIC5typesTpEE
CHECK: types::<(_, _)>
_RIC5typesTppEE
CHECK: types::<(_, _, _)>
_RIC5typesTpppEE
CHECK: types::<&_>
_RIC5typesRpE
CHECK: types::<&_>
_RIC5typesRL_pE
CHECK: types::<&mut _>
_RIC5typesQpE
CHECK: types::<&mut _>
_RIC5typesQL_pE
CHECK: types::<*const _>
_RIC5typesPpE
CHECK: types::<*mut _>
_RIC5typesOpE
; Function signatures
CHECK: function::<fn()>
_RIC8functionFEuE
CHECK: function::<fn() -> _>
_RIC8functionFEpE
CHECK: function::<fn(_)>
_RIC8functionFpEuE
CHECK: function::<fn(_, _)>
_RIC8functionFppEuE
CHECK: function::<fn(_, _, _)>
_RIC8functionFpppEuE
CHECK: function::<unsafe fn()>
_RIC8functionFUEuE
CHECK: function::<extern "C" fn()>
_RIC8functionFKCEuE
CHECK: function::<extern "cdecl" fn()>
_RIC8functionFK5cdeclEuE
CHECK: function::<unsafe extern "C-cmse-nonsecure-call" fn()>
_RIC8functionFUK21C_cmse_nonsecure_callEuE
; Trait objects
CHECK: trait::<dyn >
_RIC5traitDEL_E
CHECK: trait::<dyn for<'a> >
_RIC5traitDG_EL_E
CHECK: trait::<for<'a> fn(dyn for<'b> + 'a)>
_RIC5traitFG_DG_EL0_EuE
CHECK: trait::<dyn Display>
_RIC5traitDC7DisplayEL_E
CHECK: trait::<dyn Display + Send + Sync>
_RIC5traitDC7DisplayC4SendC4SyncEL_E
CHECK: trait::<dyn for<'a> Display>
_RIC5traitDG_C7DisplayEL_E
CHECK: trait::<dyn IntoIterator<_, Item = _>>
_RIC5traitDIC12IntoIteratorpEp4ItempEL_E
CHECK: trait::<dyn IntoIterator<Item = _>>
_RIC5traitDC12IntoIteratorp4ItempEL_E
CHECK: trait::<dyn IntoIterator<Item = _, IntoIter = _>>
_RIC5traitDC12IntoIteratorp4Itempp8IntoIterpEL_E
; Invalid trait object, missing lifetime.
CHECK: _RIC5traitDEE
_RIC5traitDEE
; Binders
CHECK: binders::<for<'a> fn(&'a _)>
_RIC7bindersFG_RL0_pEuE
CHECK: binders::<for<'a> fn(&'a mut _)>
_RIC7bindersFG_QL0_pEuE
CHECK: binders::<for<'a, 'b> fn(&'a _, &'b _)>
_RIC7bindersFG0_RL1_pRL0_pEuE
CHECK: binders::<for<'a, 'b> fn() -> for<'c, 'd> fn(&'a _, &'d _)>
_RIC7bindersFG0_EFG0_RL3_pRL0_pEuE
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 ())>
_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
; Invalid binder. Too many bound lifetimes.
CHECK: _RIC7bindersFGFF_EuE
_RIC7bindersFGFF_EuE
; Integer constants. Test value demangling.
CHECK: integer::<0>
_RIC7integerKi0_E
CHECK: integer::<1>
_RIC7integerKi1_E
CHECK: integer::<-1>
_RIC7integerKin1_E
CHECK: integer::<-15>
_RIC7integerKinf_E
CHECK: integer::<-16>
_RIC7integerKin10_E
CHECK: integer::<18446744073709551615>
_RIC7integerKoffffffffffffffff_E
CHECK: integer::<0x10000000000000000>
_RIC7integerKo10000000000000000_E
CHECK: integer::<-0x123456789abcdef01>
_RIC7integerKnn123456789abcdef01_E
; Invalid integer constant without any digits:
CHECK: _RIC7integerKi_E
_RIC7integerKi_E
; Invalid integer constants with insignificant leading zeros:
CHECK: _RIC7integerKi00_E
_RIC7integerKi00_E
CHECK: _RIC7integerKi01_E
_RIC7integerKi01_E
; Integer constants. Test all integer types.
CHECK: i8::<0>
_RIC2i8Ka0_E
CHECK: u8::<0>
_RIC2u8Kh0_E
CHECK: isize::<0>
_RIC5isizeKi0_E
CHECK: usize::<0>
_RIC5usizeKj0_E
CHECK: i32::<0>
_RIC3i32Kl0_E
CHECK: u32::<0>
_RIC3u32Km0_E
CHECK: i128::<0>
_RIC4i128Kn0_E
CHECK: u128::<0>
_RIC4u128Ko0_E
CHECK: i16::<0>
_RIC3i16Ks0_E
CHECK: u16::<0>
_RIC3u16Kt0_E
CHECK: i64::<0>
_RIC3i64Kx0_E
CHECK: u64::<0>
_RIC3u64Ky0_E
; Bool constants
CHECK: bool::<false>
_RIC4boolKb0_E
CHECK: bool::<true>
_RIC4boolKb1_E
; Invalid bool constants
CHECK: _RIC4boolKb2_E
_RIC4boolKb2_E
CHECK: _RIC4boolKbn0_E
_RIC4boolKbn0_E
; Char constants
CHECK: char::<'a'>
_RIC4charKc61_E
CHECK: char::<'"'>
_RIC4charKc22_E
CHECK: char::<'\t'>
_RIC4charKc9_E
CHECK: char::<'\r'>
_RIC4charKcd_E
CHECK: char::<'\n'>
_RIC4charKca_E
CHECK: char::<'\\'>
_RIC4charKc5c_E
CHECK: char::<'\''>
_RIC4charKc27_E
CHECK: char::<'\u{1f40d}'>
_RIC4charKc1f40d_E
CHECK: char::<'\u{10ffff}'>
_RIC4charKc10ffff_E
; Invalid char constants
CHECK: _RIC4charKc1234567_E
_RIC4charKc1234567_E
; Backreferences
CHECK: backref::<backref::ident>
_RIC7backrefNvB0_5identE
CHECK: backref::<(), ()>
_RIC7backrefuB9_E
CHECK: backref::<7, 7>
_RIC7backrefKi7_KBa_E
; Invalid backreferences
CHECK: _RB_
_RB_
CHECK: _RB5_
_RB5_
CHECK: _RNvB_1a
_RNvB_1a
CHECK: _RIC7backrefSB9_E
_RIC7backrefSB9_E
CHECK: _RIC7backrefKBa_E
_RIC7backrefKBa_E
; Dot suffix
CHECK: dot (.llvm.1234)
_RC3dot.llvm.1234
CHECK: dot (.llvm.6789)
_RC3dotC5crate.llvm.6789
; Invalid mangled characters
CHECK: _RNvC2a.1c
_RNvC2a.1c
CHECK: _RNvC2a$1c
_RNvC2a$1c
; Invalid namespace (not in [a-zA-Z]).
CHECK: _RN_C5crate4main
_RN_C5crate4main
; Invalid identifier length (UINT64_MAX + 3, which happens to be ok after a wraparound).
CHECK: _RNvC2ab18446744073709551618xy
_RNvC2ab18446744073709551618xy
; Mangling scheme includes an optional encoding version. When present it would
; indicate an encoding we don't support yet. Check that it is rejected:
CHECK: _R0NvC1a4main
_R0NvC1a4main
; Early EOF
CHECK: _RNv
_RNv
CHECK: _RNvC
_RNvC
CHECK: _RNvC1a5main
_RNvC1a5main
CHECK: _RNvC1a20abc
_RNvC1a20abc