]> git.proxmox.com Git - rustc.git/blob - src/test/codegen-units/item-collection/trait-method-as-argument.rs
New upstream version 1.20.0+dfsg1
[rustc.git] / src / test / codegen-units / item-collection / 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 //~ TRANS_ITEM fn core::ops[0]::function[0]::FnOnce[0]::call_once[0]<fn(u32) -> u32, (u32)>
44 take_foo_once(Trait::foo, 0u32);
45
46 //~ TRANS_ITEM fn trait_method_as_argument::take_foo_once[0]<char, fn(char) -> char>
47 //~ TRANS_ITEM fn trait_method_as_argument::Trait[0]::foo[0]<char>
48 //~ TRANS_ITEM fn core::ops[0]::function[0]::FnOnce[0]::call_once[0]<fn(char) -> char, (char)>
49 take_foo_once(Trait::foo, 'c');
50
51 //~ TRANS_ITEM fn trait_method_as_argument::take_foo[0]<u32, fn(u32) -> u32>
52 //~ TRANS_ITEM fn core::ops[0]::function[0]::Fn[0]::call[0]<fn(u32) -> u32, (u32)>
53 take_foo(Trait::foo, 0u32);
54
55 //~ TRANS_ITEM fn trait_method_as_argument::take_foo[0]<char, fn(char) -> char>
56 //~ TRANS_ITEM fn core::ops[0]::function[0]::Fn[0]::call[0]<fn(char) -> char, (char)>
57 take_foo(Trait::foo, 'c');
58
59 //~ TRANS_ITEM fn trait_method_as_argument::take_foo_mut[0]<u32, fn(u32) -> u32>
60 //~ TRANS_ITEM fn core::ops[0]::function[0]::FnMut[0]::call_mut[0]<fn(char) -> char, (char)>
61 take_foo_mut(Trait::foo, 0u32);
62
63 //~ TRANS_ITEM fn trait_method_as_argument::take_foo_mut[0]<char, fn(char) -> char>
64 //~ TRANS_ITEM fn core::ops[0]::function[0]::FnMut[0]::call_mut[0]<fn(u32) -> u32, (u32)>
65 take_foo_mut(Trait::foo, 'c');
66 }