@@ -274,6 +274,8 @@ impl<T> MaybeUninit<T> {
274
274
/// use std::mem::MaybeUninit;
275
275
///
276
276
/// let v: MaybeUninit<Vec<u8>> = MaybeUninit::new(vec![42]);
277
+ /// # // Prevent leaks for Miri
278
+ /// # unsafe { let _ = MaybeUninit::assume_init(v); }
277
279
/// ```
278
280
///
279
281
/// [`assume_init`]: MaybeUninit::assume_init
@@ -446,6 +448,9 @@ impl<T> MaybeUninit<T> {
446
448
/// let mut x = MaybeUninit::<String>::uninit();
447
449
///
448
450
/// 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); }
449
454
/// // This leaks the contained string:
450
455
/// x.write("hello".to_string());
451
456
/// // x is initialized now:
@@ -506,6 +511,8 @@ impl<T> MaybeUninit<T> {
506
511
/// // Create a reference into the `MaybeUninit<T>`. This is okay because we initialized it.
507
512
/// let x_vec = unsafe { &*x.as_ptr() };
508
513
/// assert_eq!(x_vec.len(), 3);
514
+ /// # // Prevent leaks for Miri
515
+ /// # unsafe { MaybeUninit::assume_init_drop(&mut x); }
509
516
/// ```
510
517
///
511
518
/// *Incorrect* usage of this method:
@@ -545,6 +552,8 @@ impl<T> MaybeUninit<T> {
545
552
/// let x_vec = unsafe { &mut *x.as_mut_ptr() };
546
553
/// x_vec.push(3);
547
554
/// assert_eq!(x_vec.len(), 4);
555
+ /// # // Prevent leaks for Miri
556
+ /// # unsafe { MaybeUninit::assume_init_drop(&mut x); }
548
557
/// ```
549
558
///
550
559
/// *Incorrect* usage of this method:
@@ -746,6 +755,8 @@ impl<T> MaybeUninit<T> {
746
755
/// use std::mem::MaybeUninit;
747
756
///
748
757
/// let mut x = MaybeUninit::<Vec<u32>>::uninit();
758
+ /// # let mut x_mu = x;
759
+ /// # let mut x = &mut x_mu;
749
760
/// // Initialize `x`:
750
761
/// x.write(vec![1, 2, 3]);
751
762
/// // Now that our `MaybeUninit<_>` is known to be initialized, it is okay to
@@ -755,6 +766,8 @@ impl<T> MaybeUninit<T> {
755
766
/// x.assume_init_ref()
756
767
/// };
757
768
/// assert_eq!(x, &vec![1, 2, 3]);
769
+ /// # // Prevent leaks for Miri
770
+ /// # unsafe { MaybeUninit::assume_init_drop(&mut x_mu); }
758
771
/// ```
759
772
///
760
773
/// ### *Incorrect* usages of this method:
@@ -1088,6 +1101,8 @@ impl<T> MaybeUninit<T> {
1088
1101
/// let init = MaybeUninit::clone_from_slice(&mut dst, &src);
1089
1102
///
1090
1103
/// assert_eq!(init, src);
1104
+ /// # // Prevent leaks for Miri
1105
+ /// # unsafe { std::ptr::drop_in_place(init); }
1091
1106
/// ```
1092
1107
///
1093
1108
/// ```
0 commit comments