]> git.proxmox.com Git - rustc.git/blame - src/test/codegen-units/unsizing.rs
Imported Upstream version 1.9.0+dfsg1
[rustc.git] / src / test / codegen-units / unsizing.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#![feature(coerce_unsized)]
16#![feature(unsize)]
17
18use std::marker::Unsize;
19use std::ops::CoerceUnsized;
20
21trait Trait {
22 fn foo(&self);
23}
24
25// Simple Case
26impl Trait for bool {
27 fn foo(&self) {}
28}
29
30impl Trait for char {
31 fn foo(&self) {}
32}
33
34// Struct Field Case
35struct Struct<T: ?Sized> {
36 _a: u32,
37 _b: i32,
38 _c: T
39}
40
41impl Trait for f64 {
42 fn foo(&self) {}
43}
44
45// Custom Coercion Case
46impl Trait for u32 {
47 fn foo(&self) {}
48}
49
50#[derive(Clone, Copy)]
51struct Wrapper<T: ?Sized>(*const T);
52
53impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<Wrapper<U>> for Wrapper<T> {}
54
55//~ TRANS_ITEM fn unsizing::main[0]
56fn main()
57{
58 // simple case
59 let bool_sized = &true;
54a0048b 60 //~ TRANS_ITEM fn unsizing::{{impl}}[0]::foo[0]
7453a54e
SL
61 let _bool_unsized = bool_sized as &Trait;
62
63 let char_sized = &true;
54a0048b 64 //~ TRANS_ITEM fn unsizing::{{impl}}[1]::foo[0]
7453a54e
SL
65 let _char_unsized = char_sized as &Trait;
66
67 // struct field
68 let struct_sized = &Struct {
69 _a: 1,
70 _b: 2,
71 _c: 3.0f64
72 };
54a0048b 73 //~ TRANS_ITEM fn unsizing::{{impl}}[2]::foo[0]
7453a54e
SL
74 let _struct_unsized = struct_sized as &Struct<Trait>;
75
76 // custom coercion
77 let wrapper_sized = Wrapper(&0u32);
54a0048b 78 //~ TRANS_ITEM fn unsizing::{{impl}}[3]::foo[0]
7453a54e
SL
79 let _wrapper_sized = wrapper_sized as Wrapper<Trait>;
80}