30 lines · 819 B · Rust
RawDownload
// SPDX-License-Identifier: Apache-2.0 OR MIT // Set the length of the vec when the `SetLenOnDrop` value goes out of scope.//// The idea is: The length field in SetLenOnDrop is a local variable// that the optimizer will see does not alias with any stores through the Vec's data// pointer. This is a workaround for alias analysis issue #32155pub(super) struct SetLenOnDrop<'a> {    len: &'a mut usize,    local_len: usize,} impl<'a> SetLenOnDrop<'a> {    #[inline]    pub(super) fn new(len: &'a mut usize) -> Self {        SetLenOnDrop { local_len: *len, len }    }     #[inline]    pub(super) fn increment_len(&mut self, increment: usize) {        self.local_len += increment;    }} impl Drop for SetLenOnDrop<'_> {    #[inline]    fn drop(&mut self) {        *self.len = self.local_len;    }}