mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 10:42:39 +01:00
da9f3ec14e
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
496 lines
8.5 KiB
Plaintext
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
|