vtable: Fix the repr

This commit is contained in:
Olivier Goffart 2020-05-17 10:30:02 +02:00
parent 5a9cbaae66
commit 1addcad615

View file

@ -37,6 +37,7 @@ where
/// Invariant: _vtable and _ptr are valid pointer for the lifetime of the container. /// Invariant: _vtable and _ptr are valid pointer for the lifetime of the container.
/// _ptr is an instance of the object represented by _vtable /// _ptr is an instance of the object represented by _vtable
#[allow(dead_code)] #[allow(dead_code)]
#[repr(C)]
struct Inner { struct Inner {
vtable: *const u8, vtable: *const u8,
ptr: *const u8, ptr: *const u8,
@ -50,7 +51,7 @@ impl Inner {
} }
} }
#[repr(C)] #[repr(transparent)]
pub struct VBox<T: ?Sized + VTableMetaDrop> { pub struct VBox<T: ?Sized + VTableMetaDrop> {
inner: Inner, inner: Inner,
phantom: PhantomData<T::Target>, phantom: PhantomData<T::Target>,
@ -95,6 +96,7 @@ impl<T: ?Sized + VTableMetaDrop> VBox<T> {
} }
} }
#[repr(transparent)]
pub struct VRef<'a, T: ?Sized + VTableMeta> { pub struct VRef<'a, T: ?Sized + VTableMeta> {
inner: Inner, inner: Inner,
phantom: PhantomData<&'a T::Target>, phantom: PhantomData<&'a T::Target>,
@ -138,6 +140,7 @@ impl<'a, T: ?Sized + VTableMeta> VRef<'a, T> {
} }
} }
#[repr(transparent)]
pub struct VRefMut<'a, T: ?Sized + VTableMeta> { pub struct VRefMut<'a, T: ?Sized + VTableMeta> {
inner: Inner, inner: Inner,
phantom: PhantomData<&'a mut T::Target>, phantom: PhantomData<&'a mut T::Target>,