diff --git a/src/meta.rs b/src/meta.rs index 5982ecc..1a0ec39 100644 --- a/src/meta.rs +++ b/src/meta.rs @@ -256,9 +256,9 @@ where /// We exclusively operate on pointers here so we only need a single function /// pointer in the meta-table for both `&T` and `&mut T` cases. #[cfg(not(feature = "nightly"))] -fn attach_vtable(value: *mut ()) -> *mut TraitObject +fn attach_vtable(value: *mut ()) -> *mut TraitObject where - TraitObject: CastFrom + 'static, + TraitObject: CastFrom + 'static + ?Sized, T: core::any::Any, { // NOTE: This should be equivalent to `Any::downcast_ref_unchecked` except @@ -399,7 +399,7 @@ impl MetaTable { { let ty_id = TypeId::of::(); // use self.addr() for unpredictable address to use for checking consistency below - let invalid_ptr = core::ptr::invalid_mut::((self as *mut Self).addr()); + let invalid_ptr = core::ptr::without_provenance_mut::((self as *mut Self).addr()); let trait_ptr = >::cast(invalid_ptr); // assert that address not changed (to catch some mistakes in CastFrom impl) assert_eq!(