Commit graph

5 commits

Author SHA1 Message Date
Lukas Markeffsky
8302f2e35f add even more tests for ptr-to-ptr casts on trait objects 2024-09-27 21:04:32 +02:00
Lukas Markeffsky
b52dea8230 add another test 2024-09-24 22:18:00 +02:00
Waffle Lapkin
e85295c321 test blessing 2024-07-04 17:56:09 +02:00
Maybe Waffle
5645e8e285 Add more checks for pointers with vtable meta
The rules for casting `*mut X<dyn A>` -> `*mut Y<dyn B>` are as follows:
- If `B` has a principal
  - `A` must have exactly the same principal (including generics)
  - Auto traits of `B` must be a subset of autotraits in `A`

Note that `X<_>` and `Y<_>` can be identity, or arbitrary structs with last field being the dyn type.
The lifetime of the trait object itself (`dyn ... + 'a`) is not checked.

This prevents a few soundness issues with `#![feature(arbitrary_self_types)]` and trait upcasting.
Namely, these checks make sure that vtable is always valid for the pointee.
2024-07-04 17:56:09 +02:00
Maybe Waffle
9e8ef92da0 Add tests for *const Trait<'a> -> *const Trait<'b> and similar casts 2024-07-04 17:56:08 +02:00