@@ -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
@@ -446,6 +448,9 @@ impl<T> MaybeUninit<T> {
446448 /// let mut x = MaybeUninit::<String>::uninit();
447449 ///
448450 /// x.write("Hello".to_string());
451+ /// # // FIXME(https://github.com/rust-lang/miri/issues/3670):
452+ /// # // use -Zmiri-disable-leak-check instead of unleaking in tests meant to leak.
453+ /// # unsafe { MaybeUninit::assume_init_drop(&mut x); }
449454 /// // This leaks the contained string:
450455 /// x.write("hello".to_string());
451456 /// // x is initialized now:
@@ -506,6 +511,8 @@ impl<T> MaybeUninit<T> {
506511 /// // Create a reference into the `MaybeUninit<T>`. This is okay because we initialized it.
507512 /// let x_vec = unsafe { &*x.as_ptr() };
508513 /// assert_eq!(x_vec.len(), 3);
514+ /// # // Prevent leaks for Miri
515+ /// # unsafe { MaybeUninit::assume_init_drop(&mut x); }
509516 /// ```
510517 ///
511518 /// *Incorrect* usage of this method:
@@ -545,6 +552,8 @@ impl<T> MaybeUninit<T> {
545552 /// let x_vec = unsafe { &mut *x.as_mut_ptr() };
546553 /// x_vec.push(3);
547554 /// assert_eq!(x_vec.len(), 4);
555+ /// # // Prevent leaks for Miri
556+ /// # unsafe { MaybeUninit::assume_init_drop(&mut x); }
548557 /// ```
549558 ///
550559 /// *Incorrect* usage of this method:
@@ -746,6 +755,8 @@ impl<T> MaybeUninit<T> {
746755 /// use std::mem::MaybeUninit;
747756 ///
748757 /// let mut x = MaybeUninit::<Vec<u32>>::uninit();
758+ /// # let mut x_mu = x;
759+ /// # let mut x = &mut x_mu;
749760 /// // Initialize `x`:
750761 /// x.write(vec![1, 2, 3]);
751762 /// // Now that our `MaybeUninit<_>` is known to be initialized, it is okay to
@@ -755,6 +766,8 @@ impl<T> MaybeUninit<T> {
755766 /// x.assume_init_ref()
756767 /// };
757768 /// assert_eq!(x, &vec![1, 2, 3]);
769+ /// # // Prevent leaks for Miri
770+ /// # unsafe { MaybeUninit::assume_init_drop(&mut x_mu); }
758771 /// ```
759772 ///
760773 /// ### *Incorrect* usages of this method:
@@ -1088,6 +1101,8 @@ impl<T> MaybeUninit<T> {
10881101 /// let init = MaybeUninit::clone_from_slice(&mut dst, &src);
10891102 ///
10901103 /// assert_eq!(init, src);
1104+ /// # // Prevent leaks for Miri
1105+ /// # unsafe { std::ptr::drop_in_place(init); }
10911106 /// ```
10921107 ///
10931108 /// ```
0 commit comments