Skip to content

Commit 3a0fe26

Browse files
committed
Remove non-focused memory leaks in core doctests for Miri.
1 parent 20d6cb3 commit 3a0fe26

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

core/src/mem/maybe_uninit.rs

+12
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,8 @@ impl<T> MaybeUninit<T> {
274274
/// use std::mem::MaybeUninit;
275275
///
276276
/// let v: MaybeUninit<Vec<u8>> = MaybeUninit::new(vec![42]);
277+
/// # // Prevent leaks for Miri
278+
/// # unsafe { let _ = MaybeUninit::assume_init(v); }
277279
/// ```
278280
///
279281
/// [`assume_init`]: MaybeUninit::assume_init
@@ -506,6 +508,8 @@ impl<T> MaybeUninit<T> {
506508
/// // Create a reference into the `MaybeUninit<T>`. This is okay because we initialized it.
507509
/// let x_vec = unsafe { &*x.as_ptr() };
508510
/// assert_eq!(x_vec.len(), 3);
511+
/// # // Prevent leaks for Miri
512+
/// # unsafe { MaybeUninit::assume_init_drop(&mut x); }
509513
/// ```
510514
///
511515
/// *Incorrect* usage of this method:
@@ -545,6 +549,8 @@ impl<T> MaybeUninit<T> {
545549
/// let x_vec = unsafe { &mut *x.as_mut_ptr() };
546550
/// x_vec.push(3);
547551
/// assert_eq!(x_vec.len(), 4);
552+
/// # // Prevent leaks for Miri
553+
/// # unsafe { MaybeUninit::assume_init_drop(&mut x); }
548554
/// ```
549555
///
550556
/// *Incorrect* usage of this method:
@@ -746,6 +752,8 @@ impl<T> MaybeUninit<T> {
746752
/// use std::mem::MaybeUninit;
747753
///
748754
/// let mut x = MaybeUninit::<Vec<u32>>::uninit();
755+
/// # let mut x_mu = x;
756+
/// # let mut x = &mut x_mu;
749757
/// // Initialize `x`:
750758
/// x.write(vec![1, 2, 3]);
751759
/// // Now that our `MaybeUninit<_>` is known to be initialized, it is okay to
@@ -755,6 +763,8 @@ impl<T> MaybeUninit<T> {
755763
/// x.assume_init_ref()
756764
/// };
757765
/// assert_eq!(x, &vec![1, 2, 3]);
766+
/// # // Prevent leaks for Miri
767+
/// # unsafe { MaybeUninit::assume_init_drop(&mut x_mu); }
758768
/// ```
759769
///
760770
/// ### *Incorrect* usages of this method:
@@ -1088,6 +1098,8 @@ impl<T> MaybeUninit<T> {
10881098
/// let init = MaybeUninit::clone_from_slice(&mut dst, &src);
10891099
///
10901100
/// assert_eq!(init, src);
1101+
/// # // Prevent leaks for Miri
1102+
/// # unsafe { std::ptr::drop_in_place(init); }
10911103
/// ```
10921104
///
10931105
/// ```

core/src/ptr/non_null.rs

+2
Original file line numberDiff line numberDiff line change
@@ -1663,6 +1663,8 @@ impl<T> NonNull<[T]> {
16631663
/// // Note that calling `memory.as_mut()` is not allowed here as the content may be uninitialized.
16641664
/// # #[allow(unused_variables)]
16651665
/// let slice: &mut [MaybeUninit<u8>] = unsafe { memory.as_uninit_slice_mut() };
1666+
/// # // Prevent leaks for Miri.
1667+
/// # unsafe { Global.deallocate(memory.cast(), Layout::new::<[u8; 32]>()); }
16661668
/// # Ok::<_, std::alloc::AllocError>(())
16671669
/// ```
16681670
#[inline]

0 commit comments

Comments
 (0)