]> git.proxmox.com Git - rustc.git/blame - src/test/codegen-units/trait-method-as-argument.rs
Imported Upstream version 1.9.0+dfsg1
[rustc.git] / src / test / codegen-units / trait-method-as-argument.rs
CommitLineData
7453a54e
SL
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
16trait Trait : Sized {
17 fn foo(self) -> Self { self }
18}
19
20impl Trait for u32 {
21 fn foo(self) -> u32 { self }
22}
23
24impl Trait for char {
25}
26
27fn take_foo_once<T, F: FnOnce(T) -> T>(f: F, arg: T) -> T {
28 (f)(arg)
29}
30
31fn take_foo<T, F: Fn(T) -> T>(f: F, arg: T) -> T {
32 (f)(arg)
33}
34
35fn 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]
40fn main() {
41 //~ TRANS_ITEM fn trait_method_as_argument::take_foo_once[0]<u32, fn(u32) -> u32>
54a0048b 42 //~ TRANS_ITEM fn trait_method_as_argument::{{impl}}[0]::foo[0]
7453a54e
SL
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