diff options
Diffstat (limited to 'tests')
4 files changed, 110 insertions, 0 deletions
diff --git a/tests/ui/higher-ranked/trait-bounds/span-bug-issue-121597.rs b/tests/ui/higher-ranked/trait-bounds/span-bug-issue-121597.rs new file mode 100644 index 00000000000..aeace9f2158 --- /dev/null +++ b/tests/ui/higher-ranked/trait-bounds/span-bug-issue-121597.rs @@ -0,0 +1,20 @@ +#![allow(incomplete_features)] +#![feature(non_lifetime_binders)] + +trait Foo: for<T> Bar<T> {} + +trait Bar<T: ?Sized> { + fn method(&self) {} +} + +struct Type2; +fn needs_bar(_: *mut Type2) {} + +fn main() { + let x: &dyn Foo = &(); + //~^ ERROR the trait `Foo` cannot be made into an object + //~| ERROR the trait `Foo` cannot be made into an object + + needs_bar(x); + //~^ ERROR mismatched types +} diff --git a/tests/ui/higher-ranked/trait-bounds/span-bug-issue-121597.stderr b/tests/ui/higher-ranked/trait-bounds/span-bug-issue-121597.stderr new file mode 100644 index 00000000000..27f82563aae --- /dev/null +++ b/tests/ui/higher-ranked/trait-bounds/span-bug-issue-121597.stderr @@ -0,0 +1,49 @@ +error[E0038]: the trait `Foo` cannot be made into an object + --> $DIR/span-bug-issue-121597.rs:14:23 + | +LL | let x: &dyn Foo = &(); + | ^^^ `Foo` cannot be made into an object + | +note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety> + --> $DIR/span-bug-issue-121597.rs:4:12 + | +LL | trait Foo: for<T> Bar<T> {} + | --- ^^^^^^^^^^^^^ ...because where clause cannot reference non-lifetime `for<...>` variables + | | + | this trait cannot be made into an object... + = note: required for the cast from `&()` to `&dyn Foo` + +error[E0038]: the trait `Foo` cannot be made into an object + --> $DIR/span-bug-issue-121597.rs:14:12 + | +LL | let x: &dyn Foo = &(); + | ^^^^^^^^ `Foo` cannot be made into an object + | +note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit <https://doc.rust-lang.org/reference/items/traits.html#object-safety> + --> $DIR/span-bug-issue-121597.rs:4:12 + | +LL | trait Foo: for<T> Bar<T> {} + | --- ^^^^^^^^^^^^^ ...because where clause cannot reference non-lifetime `for<...>` variables + | | + | this trait cannot be made into an object... + +error[E0308]: mismatched types + --> $DIR/span-bug-issue-121597.rs:18:15 + | +LL | needs_bar(x); + | --------- ^ types differ in mutability + | | + | arguments to this function are incorrect + | + = note: expected raw pointer `*mut Type2` + found reference `&dyn Foo` +note: function defined here + --> $DIR/span-bug-issue-121597.rs:11:4 + | +LL | fn needs_bar(_: *mut Type2) {} + | ^^^^^^^^^ ------------- + +error: aborting due to 3 previous errors + +Some errors have detailed explanations: E0038, E0308. +For more information about an error, try `rustc --explain E0038`. diff --git a/tests/ui/lifetimes/could-not-resolve-issue-121503.rs b/tests/ui/lifetimes/could-not-resolve-issue-121503.rs new file mode 100644 index 00000000000..6bc70a907d9 --- /dev/null +++ b/tests/ui/lifetimes/could-not-resolve-issue-121503.rs @@ -0,0 +1,13 @@ +//@ edition:2018 + +#![feature(allocator_api)] +struct Struct; +impl Struct { + async fn box_ref_Struct(self: Box<Self, impl FnMut(&mut Self)>) -> &u32 { + //~^ ERROR the trait bound `impl FnMut(&mut Self): Allocator` is not satisfied + //~| ERROR Box<Struct, impl FnMut(&mut Self)>` cannot be used as the type of `self` without + &1 + } +} + +fn main() {} diff --git a/tests/ui/lifetimes/could-not-resolve-issue-121503.stderr b/tests/ui/lifetimes/could-not-resolve-issue-121503.stderr new file mode 100644 index 00000000000..a5d8239a2df --- /dev/null +++ b/tests/ui/lifetimes/could-not-resolve-issue-121503.stderr @@ -0,0 +1,28 @@ +error[E0277]: the trait bound `impl FnMut(&mut Self): Allocator` is not satisfied + --> $DIR/could-not-resolve-issue-121503.rs:6:5 + | +LL | async fn box_ref_Struct(self: Box<Self, impl FnMut(&mut Self)>) -> &u32 { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Allocator` is not implemented for `impl FnMut(&mut Self)` + | +note: required by a bound in `Box` + --> $SRC_DIR/alloc/src/boxed.rs:LL:COL +help: consider further restricting this bound + | +LL | async fn box_ref_Struct(self: Box<Self, impl FnMut(&mut Self) + std::alloc::Allocator>) -> &u32 { + | +++++++++++++++++++++++ + +error[E0658]: `Box<Struct, impl FnMut(&mut Self)>` cannot be used as the type of `self` without the `arbitrary_self_types` feature + --> $DIR/could-not-resolve-issue-121503.rs:6:35 + | +LL | async fn box_ref_Struct(self: Box<Self, impl FnMut(&mut Self)>) -> &u32 { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | + = note: see issue #44874 <https://github.com/rust-lang/rust/issues/44874> for more information + = help: add `#![feature(arbitrary_self_types)]` to the crate attributes to enable + = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date + = help: consider changing to `self`, `&self`, `&mut self`, `self: Box<Self>`, `self: Rc<Self>`, `self: Arc<Self>`, or `self: Pin<P>` (where P is one of the previous types except `Self`) + +error: aborting due to 2 previous errors + +Some errors have detailed explanations: E0277, E0658. +For more information about an error, try `rustc --explain E0277`. |
