]> git.lizzy.rs Git - rust.git/blob - src/test/ui/symbol-names/impl1.rs
Rollup merge of #61389 - Zoxc:arena-cleanup, r=eddyb
[rust.git] / src / test / ui / symbol-names / impl1.rs
1 // ignore-tidy-linelength
2 // revisions: legacy v0
3 //[legacy]compile-flags: -Z symbol-mangling-version=legacy
4     //[v0]compile-flags: -Z symbol-mangling-version=v0
5
6 #![feature(optin_builtin_traits, rustc_attrs)]
7 #![allow(dead_code)]
8
9 mod foo {
10     pub struct Foo { x: u32 }
11
12     impl Foo {
13         #[rustc_symbol_name]
14         //[legacy]~^ ERROR symbol-name(_ZN5impl13foo3Foo3bar
15         //[legacy]~| ERROR demangling(impl1::foo::Foo::bar
16         //[legacy]~| ERROR demangling-alt(impl1::foo::Foo::bar)
17          //[v0]~^^^^ ERROR symbol-name(_RNvMNtCs4fqI2P2rA04_5impl13fooNtB2_3Foo3bar)
18             //[v0]~| ERROR demangling(<impl1[317d481089b8c8fe]::foo::Foo>::bar)
19             //[v0]~| ERROR demangling-alt(<impl1::foo::Foo>::bar)
20         #[rustc_def_path]
21         //[legacy]~^ ERROR def-path(foo::Foo::bar)
22            //[v0]~^^ ERROR def-path(foo::Foo::bar)
23         fn bar() { }
24     }
25 }
26
27 mod bar {
28     use foo::Foo;
29
30     impl Foo {
31         #[rustc_symbol_name]
32         //[legacy]~^ ERROR symbol-name(_ZN5impl13bar33_$LT$impl$u20$impl1..foo..Foo$GT$3baz
33         //[legacy]~| ERROR demangling(impl1::bar::<impl impl1::foo::Foo>::baz
34         //[legacy]~| ERROR demangling-alt(impl1::bar::<impl impl1::foo::Foo>::baz)
35          //[v0]~^^^^ ERROR symbol-name(_RNvMNtCs4fqI2P2rA04_5impl13barNtNtB4_3foo3Foo3baz)
36             //[v0]~| ERROR demangling(<impl1[317d481089b8c8fe]::foo::Foo>::baz)
37             //[v0]~| ERROR demangling-alt(<impl1::foo::Foo>::baz)
38         #[rustc_def_path]
39         //[legacy]~^ ERROR def-path(bar::<impl foo::Foo>::baz)
40            //[v0]~^^ ERROR def-path(bar::<impl foo::Foo>::baz)
41         fn baz() { }
42     }
43 }
44
45 trait Foo {
46     type Assoc;
47 }
48
49 auto trait AutoTrait {}
50
51 fn main() {
52     // Test closure mangling, and disambiguators.
53     || {};
54     || {
55         trait Bar {
56             fn method(&self) {}
57         }
58
59         // Test type mangling, by putting them in an `impl` header.
60         // FIXME(eddyb) test C varargs when `core::ffi::VaList` stops leaking into the signature
61         // (which is a problem because `core` has an unpredictable hash) - see also #44930.
62         impl Bar for [&'_ (dyn Foo<Assoc = extern fn(&u8, /*...*/)> + AutoTrait); 3] {
63             #[rustc_symbol_name]
64             //[legacy]~^ ERROR symbol-name(_ZN198_$LT$$u5b$$RF$dyn$u20$impl1..Foo$u2b$Assoc$u20$$u3d$$u20$extern$u20$$u22$C$u22$$u20$fn$LP$$RF$u8$RP$$u2b$impl1..AutoTrait$u3b$$u20$_$u5d$$u20$as$u20$impl1..main..$u7b$$u7b$closure$u7d$$u7d$..Bar$GT$6method
65             //[legacy]~| ERROR demangling(<[&dyn impl1::Foo+Assoc = extern "C" fn(&u8)+impl1::AutoTrait; _] as impl1::main::{{closure}}::Bar>::method
66             //[legacy]~| ERROR demangling-alt(<[&dyn impl1::Foo+Assoc = extern "C" fn(&u8)+impl1::AutoTrait; _] as impl1::main::{{closure}}::Bar>::method)
67              //[v0]~^^^^ ERROR symbol-name(_RNvXNCNvCs4fqI2P2rA04_5impl14mains_0ARDNtB6_3Foop5AssocFG0_KCRL0_hEuNtB6_9AutoTraitEL_j3_NtB2_3Bar6method)
68                 //[v0]~| ERROR demangling(<[&dyn impl1[317d481089b8c8fe]::Foo<Assoc = for<'a, 'b> extern "C" fn(&'b u8)> + impl1[317d481089b8c8fe]::AutoTrait; 3: usize] as impl1[317d481089b8c8fe]::main::{closure#1}::Bar>::method)
69                 //[v0]~| ERROR demangling-alt(<[&dyn impl1::Foo<Assoc = for<'a, 'b> extern "C" fn(&'b u8)> + impl1::AutoTrait; 3] as impl1::main::{closure#1}::Bar>::method)
70             #[rustc_def_path]
71             //[legacy]~^ ERROR def-path(<[&dyn Foo<Assoc = for<'r> extern "C" fn(&'r u8)> + AutoTrait; _] as main::{{closure}}#1::Bar>::method)
72                //[v0]~^^ ERROR def-path(<[&dyn Foo<Assoc = for<'r> extern "C" fn(&'r u8)> + AutoTrait; _] as main::{{closure}}#1::Bar>::method)
73             fn method(&self) {}
74         }
75     };
76 }