]> git.lizzy.rs Git - rust.git/blob - src/test/codegen-units/trait-method-as-argument.rs
fallout: update codegen-units tests
[rust.git] / src / test / codegen-units / trait-method-as-argument.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 trait Trait : Sized {
17     fn foo(self) -> Self { self }
18 }
19
20 impl Trait for u32 {
21     fn foo(self) -> u32 { self }
22 }
23
24 impl Trait for char {
25 }
26
27 fn take_foo_once<T, F: FnOnce(T) -> T>(f: F, arg: T) -> T {
28     (f)(arg)
29 }
30
31 fn take_foo<T, F: Fn(T) -> T>(f: F, arg: T) -> T {
32     (f)(arg)
33 }
34
35 fn take_foo_mut<T, F: FnMut(T) -> T>(mut f: F, arg: T) -> T {
36     (f)(arg)
37 }
38
39 //~ TRANS_ITEM fn trait_method_as_argument::main[0]
40 fn main() {
41     //~ TRANS_ITEM fn trait_method_as_argument::take_foo_once[0]<u32, fn(u32) -> u32>
42     //~ TRANS_ITEM fn trait_method_as_argument::{{impl}}[0]::foo[0]
43     take_foo_once(Trait::foo, 0u32);
44
45     //~ TRANS_ITEM fn trait_method_as_argument::take_foo_once[0]<char, fn(char) -> char>
46     //~ TRANS_ITEM fn trait_method_as_argument::Trait[0]::foo[0]<char>
47     take_foo_once(Trait::foo, 'c');
48
49     //~ TRANS_ITEM fn trait_method_as_argument::take_foo[0]<u32, fn(u32) -> u32>
50     take_foo(Trait::foo, 0u32);
51
52     //~ TRANS_ITEM fn trait_method_as_argument::take_foo[0]<char, fn(char) -> char>
53     take_foo(Trait::foo, 'c');
54
55     //~ TRANS_ITEM fn trait_method_as_argument::take_foo_mut[0]<u32, fn(u32) -> u32>
56     take_foo_mut(Trait::foo, 0u32);
57
58     //~ TRANS_ITEM fn trait_method_as_argument::take_foo_mut[0]<char, fn(char) -> char>
59     take_foo_mut(Trait::foo, 'c');
60 }
61
62 //~ TRANS_ITEM drop-glue i8