]> git.lizzy.rs Git - rust.git/blob - src/test/codegen-units/item-collection/trait-implementations.rs
Auto merge of #104535 - mikebenfield:discr-fix, r=pnkfelix
[rust.git] / src / test / codegen-units / item-collection / trait-implementations.rs
1 // compile-flags:-Zprint-mono-items=eager
2
3 #![deny(dead_code)]
4 #![feature(start)]
5
6 pub trait SomeTrait {
7     fn foo(&self);
8     fn bar<T>(&self, x: T);
9 }
10
11 impl SomeTrait for i64 {
12
13     //~ MONO_ITEM fn <i64 as SomeTrait>::foo
14     fn foo(&self) {}
15
16     fn bar<T>(&self, _: T) {}
17 }
18
19 impl SomeTrait for i32 {
20
21     //~ MONO_ITEM fn <i32 as SomeTrait>::foo
22     fn foo(&self) {}
23
24     fn bar<T>(&self, _: T) {}
25 }
26
27 pub trait SomeGenericTrait<T> {
28     fn foo(&self, x: T);
29     fn bar<T2>(&self, x: T, y: T2);
30 }
31
32 // Concrete impl of generic trait
33 impl SomeGenericTrait<u32> for f64 {
34
35     //~ MONO_ITEM fn <f64 as SomeGenericTrait<u32>>::foo
36     fn foo(&self, _: u32) {}
37
38     fn bar<T2>(&self, _: u32, _: T2) {}
39 }
40
41 // Generic impl of generic trait
42 impl<T> SomeGenericTrait<T> for f32 {
43
44     fn foo(&self, _: T) {}
45     fn bar<T2>(&self, _: T, _: T2) {}
46 }
47
48 //~ MONO_ITEM fn start
49 #[start]
50 fn start(_: isize, _: *const *const u8) -> isize {
51    //~ MONO_ITEM fn <i32 as SomeTrait>::bar::<char>
52    0i32.bar('x');
53
54    //~ MONO_ITEM fn <f64 as SomeGenericTrait<u32>>::bar::<&str>
55    0f64.bar(0u32, "&str");
56
57    //~ MONO_ITEM fn <f64 as SomeGenericTrait<u32>>::bar::<()>
58    0f64.bar(0u32, ());
59
60    //~ MONO_ITEM fn <f32 as SomeGenericTrait<char>>::foo
61    0f32.foo('x');
62
63    //~ MONO_ITEM fn <f32 as SomeGenericTrait<i64>>::foo
64    0f32.foo(-1i64);
65
66    //~ MONO_ITEM fn <f32 as SomeGenericTrait<u32>>::bar::<()>
67    0f32.bar(0u32, ());
68
69    //~ MONO_ITEM fn <f32 as SomeGenericTrait<&str>>::bar::<&str>
70    0f32.bar("&str", "&str");
71
72    0
73 }