]> git.lizzy.rs Git - rust.git/blob - src/test/codegen-units/item-collection/generic-impl.rs
dd5367ef0380ab51c91d529f0b437e7e93898409
[rust.git] / src / test / codegen-units / item-collection / generic-impl.rs
1 // compile-flags:-Zprint-mono-items=eager
2
3 #![deny(dead_code)]
4 #![feature(start)]
5
6 struct Struct<T> {
7     x: T,
8     f: fn(x: T) -> T,
9 }
10
11 fn id<T>(x: T) -> T { x }
12
13 impl<T> Struct<T> {
14
15     fn new(x: T) -> Struct<T> {
16         Struct {
17             x: x,
18             f: id
19         }
20     }
21
22     fn get<T2>(self, x: T2) -> (T, T2) {
23         (self.x, x)
24     }
25 }
26
27 pub struct LifeTimeOnly<'a> {
28     _a: &'a u32
29 }
30
31 impl<'a> LifeTimeOnly<'a> {
32
33     //~ MONO_ITEM fn LifeTimeOnly::foo
34     pub fn foo(&self) {}
35     //~ MONO_ITEM fn LifeTimeOnly::bar
36     pub fn bar(&'a self) {}
37     //~ MONO_ITEM fn LifeTimeOnly::baz
38     pub fn baz<'b>(&'b self) {}
39
40     pub fn non_instantiated<T>(&self) {}
41 }
42
43 //~ MONO_ITEM fn start
44 #[start]
45 fn start(_: isize, _: *const *const u8) -> isize {
46     //~ MONO_ITEM fn Struct::<i32>::new
47     //~ MONO_ITEM fn id::<i32>
48     //~ MONO_ITEM fn Struct::<i32>::get::<i16>
49     let _ = Struct::new(0i32).get(0i16);
50
51     //~ MONO_ITEM fn Struct::<i64>::new
52     //~ MONO_ITEM fn id::<i64>
53     //~ MONO_ITEM fn Struct::<i64>::get::<i16>
54     let _ = Struct::new(0i64).get(0i16);
55
56     //~ MONO_ITEM fn Struct::<char>::new
57     //~ MONO_ITEM fn id::<char>
58     //~ MONO_ITEM fn Struct::<char>::get::<i16>
59     let _ = Struct::new('c').get(0i16);
60
61     //~ MONO_ITEM fn Struct::<&str>::new
62     //~ MONO_ITEM fn id::<&str>
63     //~ MONO_ITEM fn Struct::<Struct<&str>>::get::<i16>
64     let _ = Struct::new(Struct::new("str")).get(0i16);
65
66     //~ MONO_ITEM fn Struct::<Struct<&str>>::new
67     //~ MONO_ITEM fn id::<Struct<&str>>
68     let _ = (Struct::new(Struct::new("str")).f)(Struct::new("str"));
69
70     0
71 }