]> git.lizzy.rs Git - rust.git/blob - src/test/ui/issues/issue-15763.rs
Rollup merge of #105955 - Nilstrieb:no-trivial-opt-wrappers-we-have-field-accesses...
[rust.git] / src / test / ui / issues / issue-15763.rs
1 // run-pass
2 #![allow(unreachable_code)]
3
4 #[derive(PartialEq, Debug)]
5 struct Bar {
6     x: isize
7 }
8 impl Drop for Bar {
9     fn drop(&mut self) {
10         assert_eq!(self.x, 22);
11     }
12 }
13
14 #[derive(PartialEq, Debug)]
15 struct Foo {
16     x: Bar,
17     a: isize
18 }
19
20 fn foo() -> Result<Foo, isize> {
21     return Ok(Foo {
22         x: Bar { x: 22 },
23         a: return Err(32)
24     });
25 }
26
27 fn baz() -> Result<Foo, isize> {
28     Ok(Foo {
29         x: Bar { x: 22 },
30         a: return Err(32)
31     })
32 }
33
34 // explicit immediate return
35 fn aa() -> isize {
36     return 3;
37 }
38
39 // implicit immediate return
40 fn bb() -> isize {
41     3
42 }
43
44 // implicit outptr return
45 fn cc() -> Result<isize, isize> {
46     Ok(3)
47 }
48
49 // explicit outptr return
50 fn dd() -> Result<isize, isize> {
51     return Ok(3);
52 }
53
54 trait A {
55     fn aaa(&self) -> isize {
56         3
57     }
58     fn bbb(&self) -> isize {
59         return 3;
60     }
61     fn ccc(&self) -> Result<isize, isize> {
62         Ok(3)
63     }
64     fn ddd(&self) -> Result<isize, isize> {
65         return Ok(3);
66     }
67 }
68
69 impl A for isize {}
70
71 fn main() {
72     assert_eq!(foo(), Err(32));
73     assert_eq!(baz(), Err(32));
74
75     assert_eq!(aa(), 3);
76     assert_eq!(bb(), 3);
77     assert_eq!(cc().unwrap(), 3);
78     assert_eq!(dd().unwrap(), 3);
79
80     let i = Box::new(32isize) as Box<dyn A>;
81     assert_eq!(i.aaa(), 3);
82     let i = Box::new(32isize) as Box<dyn A>;
83     assert_eq!(i.bbb(), 3);
84     let i = Box::new(32isize) as Box<dyn A>;
85     assert_eq!(i.ccc().unwrap(), 3);
86     let i = Box::new(32isize) as Box<dyn A>;
87     assert_eq!(i.ddd().unwrap(), 3);
88 }