about summary refs log tree commit diff
path: root/tests/ui/issues/issue-15763.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/issues/issue-15763.rs')
-rw-r--r--tests/ui/issues/issue-15763.rs88
1 files changed, 88 insertions, 0 deletions
diff --git a/tests/ui/issues/issue-15763.rs b/tests/ui/issues/issue-15763.rs
new file mode 100644
index 00000000000..ae0863615e2
--- /dev/null
+++ b/tests/ui/issues/issue-15763.rs
@@ -0,0 +1,88 @@
+// run-pass
+#![allow(unreachable_code)]
+
+#[derive(PartialEq, Debug)]
+struct Bar {
+    x: isize
+}
+impl Drop for Bar {
+    fn drop(&mut self) {
+        assert_eq!(self.x, 22);
+    }
+}
+
+#[derive(PartialEq, Debug)]
+struct Foo {
+    x: Bar,
+    a: isize
+}
+
+fn foo() -> Result<Foo, isize> {
+    return Ok(Foo {
+        x: Bar { x: 22 },
+        a: return Err(32)
+    });
+}
+
+fn baz() -> Result<Foo, isize> {
+    Ok(Foo {
+        x: Bar { x: 22 },
+        a: return Err(32)
+    })
+}
+
+// explicit immediate return
+fn aa() -> isize {
+    return 3;
+}
+
+// implicit immediate return
+fn bb() -> isize {
+    3
+}
+
+// implicit outptr return
+fn cc() -> Result<isize, isize> {
+    Ok(3)
+}
+
+// explicit outptr return
+fn dd() -> Result<isize, isize> {
+    return Ok(3);
+}
+
+trait A {
+    fn aaa(&self) -> isize {
+        3
+    }
+    fn bbb(&self) -> isize {
+        return 3;
+    }
+    fn ccc(&self) -> Result<isize, isize> {
+        Ok(3)
+    }
+    fn ddd(&self) -> Result<isize, isize> {
+        return Ok(3);
+    }
+}
+
+impl A for isize {}
+
+fn main() {
+    assert_eq!(foo(), Err(32));
+    assert_eq!(baz(), Err(32));
+
+    assert_eq!(aa(), 3);
+    assert_eq!(bb(), 3);
+    assert_eq!(cc().unwrap(), 3);
+    assert_eq!(dd().unwrap(), 3);
+
+    let i = Box::new(32isize) as Box<dyn A>;
+    assert_eq!(i.aaa(), 3);
+    let i = Box::new(32isize) as Box<dyn A>;
+    assert_eq!(i.bbb(), 3);
+    let i = Box::new(32isize) as Box<dyn A>;
+    assert_eq!(i.ccc().unwrap(), 3);
+    let i = Box::new(32isize) as Box<dyn A>;
+    assert_eq!(i.ddd().unwrap(), 3);
+}