diff --git a/src/lib.rs b/src/lib.rs index 32650ca..2f84eb9 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -48,10 +48,8 @@ impl Drop for SmallInt { fn drop(&mut self) { if let Self::Heap((r, s)) = self { let size = usize::try_from(s.abs()).unwrap(); - let mut slice = unsafe { core::slice::from_raw_parts(r, size) }; - unsafe { - core::ptr::drop_in_place(&mut slice); - } + let slice = unsafe { core::slice::from_raw_parts_mut(*r, size) }; + unsafe { std::mem::drop(Box::from_raw(slice)) } } } @@ -100,7 +98,7 @@ impl From for SmallInt { while v != 0 { vec.push(v as u32); - v = (v >> 1) >> (32 - 1); + v >>= 32; } let mut slice = ManuallyDrop::new(vec.into_boxed_slice()); SmallInt::Heap((slice.as_mut_ptr(), isize::try_from(slice.len()).unwrap()))