]> git.lizzy.rs Git - rust.git/blob - src/test/codegen-units/generic-functions.rs
Implement the translation item collector.
[rust.git] / src / test / codegen-units / generic-functions.rs
1 // Copyright 2012-2015 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
4 //
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
10
11 // ignore-tidy-linelength
12 // compile-flags:-Zprint-trans-items=eager
13
14 #![deny(dead_code)]
15
16 fn foo1<T1>(a: T1) -> (T1, u32) {
17     (a, 1)
18 }
19
20 fn foo2<T1, T2>(a: T1, b: T2) -> (T1, T2) {
21     (a, b)
22 }
23
24 fn foo3<T1, T2, T3>(a: T1, b: T2, c: T3) -> (T1, T2, T3) {
25     (a, b, c)
26 }
27
28 // This function should be instantiated even if no used
29 //~ TRANS_ITEM fn generic_functions::lifetime_only[0]
30 pub fn lifetime_only<'a>(a: &'a u32) -> &'a u32 {
31     a
32 }
33
34 //~ TRANS_ITEM fn generic_functions::main[0]
35 fn main() {
36     //~ TRANS_ITEM fn generic_functions::foo1[0]<i32>
37     let _ = foo1(2i32);
38     //~ TRANS_ITEM fn generic_functions::foo1[0]<i64>
39     let _ = foo1(2i64);
40     //~ TRANS_ITEM fn generic_functions::foo1[0]<&str>
41     let _ = foo1("abc");
42     //~ TRANS_ITEM fn generic_functions::foo1[0]<char>
43     let _ = foo1('v');
44
45     //~ TRANS_ITEM fn generic_functions::foo2[0]<i32, i32>
46     let _ = foo2(2i32, 2i32);
47     //~ TRANS_ITEM fn generic_functions::foo2[0]<i64, &str>
48     let _ = foo2(2i64, "abc");
49     //~ TRANS_ITEM fn generic_functions::foo2[0]<&str, usize>
50     let _ = foo2("a", 2usize);
51     //~ TRANS_ITEM fn generic_functions::foo2[0]<char, ()>
52     let _ = foo2('v', ());
53
54     //~ TRANS_ITEM fn generic_functions::foo3[0]<i32, i32, i32>
55     let _ = foo3(2i32, 2i32, 2i32);
56     //~ TRANS_ITEM fn generic_functions::foo3[0]<i64, &str, char>
57     let _ = foo3(2i64, "abc", 'c');
58     //~ TRANS_ITEM fn generic_functions::foo3[0]<i16, &str, usize>
59     let _ = foo3(0i16, "a", 2usize);
60     //~ TRANS_ITEM fn generic_functions::foo3[0]<char, (), ()>
61     let _ = foo3('v', (), ());
62 }
63
64 //~ TRANS_ITEM drop-glue i8