rust/tests/ui/traits/new-solver/alias-bound-unsound.rs

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

28 lines
558 B
Rust
Raw Normal View History

// compile-flags: -Ztrait-solver=next
// Makes sure that alias bounds are not unsound!
#![feature(trivial_bounds)]
trait Foo {
type Item: Copy
where
<Self as Foo>::Item: Copy;
fn copy_me(x: &Self::Item) -> Self::Item {
*x
}
}
impl Foo for () {
type Item = String where String: Copy;
}
fn main() {
let x = String::from("hello, world");
drop(<() as Foo>::copy_me(&x));
2023-06-27 16:13:50 -05:00
//~^ ERROR the type `&<() as Foo>::Item` is not well-formed
2023-06-23 11:26:22 -05:00
//~| ERROR `<() as Foo>::Item` is not well-formed
println!("{x}");
}