]>
Commit | Line | Data |
---|---|---|
b7449926 | 1 | // run-pass |
0bf4aa26 | 2 | #![allow(unreachable_code)] |
1a4d82fc JJ |
3 | #![feature(box_syntax)] |
4 | ||
85aaf69f | 5 | #[derive(PartialEq, Debug)] |
1a4d82fc | 6 | struct Bar { |
c34b1796 | 7 | x: isize |
1a4d82fc JJ |
8 | } |
9 | impl Drop for Bar { | |
10 | fn drop(&mut self) { | |
11 | assert_eq!(self.x, 22); | |
12 | } | |
13 | } | |
14 | ||
85aaf69f | 15 | #[derive(PartialEq, Debug)] |
1a4d82fc JJ |
16 | struct Foo { |
17 | x: Bar, | |
c34b1796 | 18 | a: isize |
1a4d82fc JJ |
19 | } |
20 | ||
c34b1796 | 21 | fn foo() -> Result<Foo, isize> { |
1a4d82fc JJ |
22 | return Ok(Foo { |
23 | x: Bar { x: 22 }, | |
24 | a: return Err(32) | |
25 | }); | |
26 | } | |
27 | ||
c34b1796 | 28 | fn baz() -> Result<Foo, isize> { |
1a4d82fc JJ |
29 | Ok(Foo { |
30 | x: Bar { x: 22 }, | |
31 | a: return Err(32) | |
32 | }) | |
33 | } | |
34 | ||
35 | // explicit immediate return | |
c34b1796 | 36 | fn aa() -> isize { |
1a4d82fc JJ |
37 | return 3; |
38 | } | |
39 | ||
40 | // implicit immediate return | |
c34b1796 | 41 | fn bb() -> isize { |
1a4d82fc JJ |
42 | 3 |
43 | } | |
44 | ||
45 | // implicit outptr return | |
c34b1796 | 46 | fn cc() -> Result<isize, isize> { |
1a4d82fc JJ |
47 | Ok(3) |
48 | } | |
49 | ||
50 | // explicit outptr return | |
c34b1796 | 51 | fn dd() -> Result<isize, isize> { |
1a4d82fc JJ |
52 | return Ok(3); |
53 | } | |
54 | ||
55 | trait A { | |
c34b1796 | 56 | fn aaa(&self) -> isize { |
1a4d82fc JJ |
57 | 3 |
58 | } | |
c34b1796 | 59 | fn bbb(&self) -> isize { |
1a4d82fc JJ |
60 | return 3; |
61 | } | |
c34b1796 | 62 | fn ccc(&self) -> Result<isize, isize> { |
1a4d82fc JJ |
63 | Ok(3) |
64 | } | |
c34b1796 | 65 | fn ddd(&self) -> Result<isize, isize> { |
1a4d82fc JJ |
66 | return Ok(3); |
67 | } | |
68 | } | |
69 | ||
c34b1796 | 70 | impl A for isize {} |
1a4d82fc JJ |
71 | |
72 | fn main() { | |
73 | assert_eq!(foo(), Err(32)); | |
74 | assert_eq!(baz(), Err(32)); | |
75 | ||
76 | assert_eq!(aa(), 3); | |
77 | assert_eq!(bb(), 3); | |
78 | assert_eq!(cc().unwrap(), 3); | |
79 | assert_eq!(dd().unwrap(), 3); | |
80 | ||
dc9dc135 | 81 | let i = box 32isize as Box<dyn A>; |
1a4d82fc | 82 | assert_eq!(i.aaa(), 3); |
dc9dc135 | 83 | let i = box 32isize as Box<dyn A>; |
1a4d82fc | 84 | assert_eq!(i.bbb(), 3); |
dc9dc135 | 85 | let i = box 32isize as Box<dyn A>; |
1a4d82fc | 86 | assert_eq!(i.ccc().unwrap(), 3); |
dc9dc135 | 87 | let i = box 32isize as Box<dyn A>; |
1a4d82fc JJ |
88 | assert_eq!(i.ddd().unwrap(), 3); |
89 | } |