For Arc<T>, the into_raw method gives shared access to the memory, and the reference count is not decreased,
so the value will not be deallocated until we convert back to Arc<T> and drop it.
See https://doc.rust-lang.org/src/alloc/sync.rs.html#1480.
According to the documentation, Arc::from_raw allows transmuting between different types as long as the pointer has the same size and alignment.
In verification this responsibility is dispatched to casting the PointsTo<T> appropriately, which is not handled here.