]> git.proxmox.com Git - rustc.git/blame - src/test/ui/issues/issue-15763.rs
New upstream version 1.48.0~beta.8+dfsg1
[rustc.git] / src / test / ui / issues / issue-15763.rs
CommitLineData
b7449926 1// run-pass
0bf4aa26 2#![allow(unreachable_code)]
1a4d82fc
JJ
3#![feature(box_syntax)]
4
85aaf69f 5#[derive(PartialEq, Debug)]
1a4d82fc 6struct Bar {
c34b1796 7 x: isize
1a4d82fc
JJ
8}
9impl Drop for Bar {
10 fn drop(&mut self) {
11 assert_eq!(self.x, 22);
12 }
13}
14
85aaf69f 15#[derive(PartialEq, Debug)]
1a4d82fc
JJ
16struct Foo {
17 x: Bar,
c34b1796 18 a: isize
1a4d82fc
JJ
19}
20
c34b1796 21fn foo() -> Result<Foo, isize> {
1a4d82fc
JJ
22 return Ok(Foo {
23 x: Bar { x: 22 },
24 a: return Err(32)
25 });
26}
27
c34b1796 28fn 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 36fn aa() -> isize {
1a4d82fc
JJ
37 return 3;
38}
39
40// implicit immediate return
c34b1796 41fn bb() -> isize {
1a4d82fc
JJ
42 3
43}
44
45// implicit outptr return
c34b1796 46fn cc() -> Result<isize, isize> {
1a4d82fc
JJ
47 Ok(3)
48}
49
50// explicit outptr return
c34b1796 51fn dd() -> Result<isize, isize> {
1a4d82fc
JJ
52 return Ok(3);
53}
54
55trait 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 70impl A for isize {}
1a4d82fc
JJ
71
72fn 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}