Skip to content

Commit 622ca1d

Browse files
committed
Add a test for *const Tr<A> to *const Tr<B> casts
1 parent 92d7277 commit 622ca1d

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// check-fail
2+
//
3+
// issue: <https://github.com/rust-lang/rust/issues/120222>
4+
5+
6+
trait A {}
7+
impl<T> A for T {}
8+
trait B {}
9+
impl<T> B for T {}
10+
11+
trait Trait<G> {}
12+
struct X;
13+
impl<T> Trait<X> for T {}
14+
struct Y;
15+
impl<T> Trait<Y> for T {}
16+
17+
fn main() {
18+
let a: *const dyn A = &();
19+
let b: *const dyn B = a as _; //~ error: casting `*const dyn A` as `*const dyn B` is invalid
20+
21+
let x: *const dyn Trait<X> = &();
22+
let y: *const dyn Trait<Y> = x as _;
23+
24+
_ = (b, y);
25+
}
26+
27+
fn generic<T>(x: *const dyn Trait<X>, t: *const dyn Trait<T>) {
28+
let _: *const dyn Trait<T> = x as _;
29+
let _: *const dyn Trait<X> = t as _;
30+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
error[E0606]: casting `*const dyn A` as `*const dyn B` is invalid
2+
--> $DIR/ptr-to-trait-obj-different-args.rs:19:27
3+
|
4+
LL | let b: *const dyn B = a as _;
5+
| ^^^^^^
6+
|
7+
= note: vtable kinds may not match
8+
9+
error: aborting due to 1 previous error
10+
11+
For more information about this error, try `rustc --explain E0606`.

0 commit comments

Comments
 (0)