| //@ check-fail |
| // |
| // issue: <https://github.com/rust-lang/rust/issues/120222> |
| |
| trait A {} |
| impl<T> A for T {} |
| trait B {} |
| impl<T> B for T {} |
| |
| trait Trait<G> {} |
| struct X; |
| impl<T> Trait<X> for T {} |
| struct Y; |
| impl<T> Trait<Y> for T {} |
| |
| fn main() { |
| let a: *const dyn A = &(); |
| let b: *const dyn B = a as _; //~ error: casting `*const dyn A` as `*const dyn B` is invalid |
| |
| let x: *const dyn Trait<X> = &(); |
| let y: *const dyn Trait<Y> = x as _; //~ error: casting `*const dyn Trait<X>` as `*const dyn Trait<Y>` is invalid |
| |
| _ = (b, y); |
| } |
| |
| fn generic<T>(x: *const dyn Trait<X>, t: *const dyn Trait<T>) { |
| let _: *const dyn Trait<T> = x as _; //~ error: casting `*const (dyn Trait<X> + 'static)` as `*const dyn Trait<T>` is invalid |
| let _: *const dyn Trait<X> = t as _; //~ error: casting `*const (dyn Trait<T> + 'static)` as `*const dyn Trait<X>` is invalid |
| } |
| |
| trait Assocked { |
| type Assoc: ?Sized; |
| } |
| |
| fn change_assoc(x: *mut dyn Assocked<Assoc = u8>) -> *mut dyn Assocked<Assoc = u32> { |
| x as _ //~ error: casting `*mut (dyn Assocked<Assoc = u8> + 'static)` as `*mut (dyn Assocked<Assoc = u32> + 'static)` is invalid |
| } |