Explicitly specify all cast types in unsafe code

This commit is contained in:
David Tolnay 2019-10-09 18:45:05 -07:00
parent d57f80c822
commit 4118197eac

View File

@ -233,7 +233,7 @@ impl Error {
if self.is::<E>() {
let outer = ManuallyDrop::new(self);
unsafe {
let error = ptr::read(outer.inner.error() as *const _ as *const E);
let error = ptr::read(outer.inner.error() as *const (dyn StdError + Send + Sync) as *const E);
let inner = ptr::read(&outer.inner);
let erased = ManuallyDrop::into_inner(inner);
(erased.vtable.object_drop_front)(erased);
@ -285,7 +285,7 @@ impl Error {
E: Display + Debug + Send + Sync + 'static,
{
if self.is::<E>() {
Some(unsafe { &*(self.inner.error() as *const _ as *const E) })
Some(unsafe { &*(self.inner.error() as *const (dyn StdError + Send + Sync) as *const E) })
} else {
None
}
@ -297,7 +297,7 @@ impl Error {
E: Display + Debug + Send + Sync + 'static,
{
if self.is::<E>() {
Some(unsafe { &mut *(self.inner.error_mut() as *mut _ as *mut E) })
Some(unsafe { &mut *(self.inner.error_mut() as *mut (dyn StdError + Send + Sync) as *mut E) })
} else {
None
}