diff options
| author | Maybe Waffle <waffle.lapkin@gmail.com> | 2024-01-22 17:21:57 +0000 |
|---|---|---|
| committer | Maybe Lapkin <waffle.lapkin@gmail.com> | 2024-07-04 17:56:08 +0200 |
| commit | 36b1f4411db4a35fbbeaec58f0603e4e086e851f (patch) | |
| tree | b062c9dd8975b8a54e55d8d14c18707908ad864a | |
| parent | e2cf31a6148725bde4ea48acf1e4fe72675257a2 (diff) | |
| download | rust-36b1f4411db4a35fbbeaec58f0603e4e086e851f.tar.gz rust-36b1f4411db4a35fbbeaec58f0603e4e086e851f.zip | |
Add a test for `*const Tr<A>` to `*const Tr<B>` casts
| -rw-r--r-- | tests/ui/cast/ptr-to-trait-obj-different-args.rs | 30 | ||||
| -rw-r--r-- | tests/ui/cast/ptr-to-trait-obj-different-args.stderr | 11 |
2 files changed, 41 insertions, 0 deletions
diff --git a/tests/ui/cast/ptr-to-trait-obj-different-args.rs b/tests/ui/cast/ptr-to-trait-obj-different-args.rs new file mode 100644 index 00000000000..2cb661ba016 --- /dev/null +++ b/tests/ui/cast/ptr-to-trait-obj-different-args.rs @@ -0,0 +1,30 @@ +// 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 _; + + _ = (b, y); +} + +fn generic<T>(x: *const dyn Trait<X>, t: *const dyn Trait<T>) { + let _: *const dyn Trait<T> = x as _; + let _: *const dyn Trait<X> = t as _; +} diff --git a/tests/ui/cast/ptr-to-trait-obj-different-args.stderr b/tests/ui/cast/ptr-to-trait-obj-different-args.stderr new file mode 100644 index 00000000000..14e8a48ffd9 --- /dev/null +++ b/tests/ui/cast/ptr-to-trait-obj-different-args.stderr @@ -0,0 +1,11 @@ +error[E0606]: casting `*const dyn A` as `*const dyn B` is invalid + --> $DIR/ptr-to-trait-obj-different-args.rs:19:27 + | +LL | let b: *const dyn B = a as _; + | ^^^^^^ + | + = note: vtable kinds may not match + +error: aborting due to 1 previous error + +For more information about this error, try `rustc --explain E0606`. |
