summaryrefslogtreecommitdiffstats
path: root/tests/ui/self/arbitrary-self-types-not-object-safe.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/self/arbitrary-self-types-not-object-safe.rs')
-rw-r--r--tests/ui/self/arbitrary-self-types-not-object-safe.rs44
1 files changed, 44 insertions, 0 deletions
diff --git a/tests/ui/self/arbitrary-self-types-not-object-safe.rs b/tests/ui/self/arbitrary-self-types-not-object-safe.rs
new file mode 100644
index 000000000..40e8df339
--- /dev/null
+++ b/tests/ui/self/arbitrary-self-types-not-object-safe.rs
@@ -0,0 +1,44 @@
+// revisions: curr object_safe_for_dispatch
+
+#![cfg_attr(object_safe_for_dispatch, feature(object_safe_for_dispatch))]
+
+use std::rc::Rc;
+
+trait Foo {
+ fn foo(self: &Rc<Self>) -> usize;
+}
+
+trait Bar {
+ fn foo(self: &Rc<Self>) -> usize where Self: Sized;
+ fn bar(self: Rc<Self>) -> usize;
+}
+
+impl Foo for usize {
+ fn foo(self: &Rc<Self>) -> usize {
+ **self
+ }
+}
+
+impl Bar for usize {
+ fn foo(self: &Rc<Self>) -> usize {
+ **self
+ }
+
+ fn bar(self: Rc<Self>) -> usize {
+ *self
+ }
+}
+
+fn make_foo() {
+ let x = Rc::new(5usize) as Rc<dyn Foo>;
+ //[curr]~^ ERROR E0038
+ //[curr]~| ERROR E0038
+ //[object_safe_for_dispatch]~^^^ ERROR E0038
+}
+
+fn make_bar() {
+ let x = Rc::new(5usize) as Rc<dyn Bar>;
+ x.bar();
+}
+
+fn main() {}