Skip to content

Commit 2ebf5e6

Browse files
Fix doctests
1 parent 6067126 commit 2ebf5e6

File tree

1 file changed

+19
-7
lines changed

1 file changed

+19
-7
lines changed

src/libcore/mem/maybe_uninit.rs

+19-7
Original file line numberDiff line numberDiff line change
@@ -526,6 +526,7 @@ impl<T> MaybeUninit<T> {
526526
/// ### Correct usage of this method:
527527
///
528528
/// ```rust
529+
/// #![feature(maybe_uninit_ref)]
529530
/// use ::std::mem::MaybeUninit;
530531
///
531532
/// let mut x = MaybeUninit::<Vec<u32>>::uninit();
@@ -547,6 +548,7 @@ impl<T> MaybeUninit<T> {
547548
/// ### *Incorrect* usages of this method:
548549
///
549550
/// ```rust,no_run
551+
/// #![feature(maybe_uninit_ref)]
550552
/// use std::mem::MaybeUninit;
551553
///
552554
/// let x = MaybeUninit::<Vec<u32>>::uninit();
@@ -555,6 +557,7 @@ impl<T> MaybeUninit<T> {
555557
/// ```
556558
///
557559
/// ```rust,no_run
560+
/// #![feature(maybe_uninit_ref)]
558561
/// use std::{cell::Cell, mem::MaybeUninit};
559562
///
560563
/// let b = MaybeUninit::<Cell<bool>>::uninit();
@@ -589,6 +592,7 @@ impl<T> MaybeUninit<T> {
589592
/// ### Correct usage of this method:
590593
///
591594
/// ```rust
595+
/// #![feature(maybe_uninit_ref)]
592596
/// use ::std::mem::MaybeUninit;
593597
///
594598
/// # unsafe extern "C" fn initialize_buffer (buf: *mut [u8; 2048]) { *buf = [0; 2048] }
@@ -599,6 +603,7 @@ impl<T> MaybeUninit<T> {
599603
/// }
600604
///
601605
/// let mut buf = MaybeUninit::<[u8; 2048]>::uninit();
606+
///
602607
/// // Initialize `buf`:
603608
/// unsafe { initialize_buffer(buf.as_mut_ptr()); }
604609
/// // Now we know that `buf` has been initialized; so we could `.assume_init()` it.
@@ -611,16 +616,21 @@ impl<T> MaybeUninit<T> {
611616
/// // - `buf` has been initialized.
612617
/// buf.get_mut()
613618
/// };
619+
///
614620
/// // Now we can use `buf` as a normal slice:
615621
/// buf.sort_unstable();
616-
/// assert!(buf.is_sorted());
622+
/// assert!(
623+
/// buf.chunks(2).all(|chunk| chunk[0] <= chunk[1]),
624+
/// "buffer is sorted",
625+
/// );
617626
/// ```
618627
///
619628
/// ### *Incorrect* usages of this method:
620629
///
621-
/// Do not use `.get_mut()` to initialize a value
630+
/// You cannot use `.get_mut()` to initialize a value:
622631
///
623632
/// ```rust,no_run
633+
/// #![feature(maybe_uninit_ref)]
624634
/// use std::mem::MaybeUninit;
625635
///
626636
/// let mut b = MaybeUninit::<bool>::uninit();
@@ -631,11 +641,12 @@ impl<T> MaybeUninit<T> {
631641
/// }
632642
/// ```
633643
///
634-
/// For instance, you cannot [`Read`] into an uninitialized buffer.
644+
/// For instance, you cannot [`Read`] into an uninitialized buffer:
635645
///
636646
/// [`Read`]: https://doc.rust-lang.org/std/io/trait.Read.html
637647
///
638648
/// ```rust,no_run
649+
/// #![feature(maybe_uninit_ref)]
639650
/// use std::{io, mem::MaybeUninit};
640651
///
641652
/// fn read_chunk (reader: &'_ mut dyn io::Read) -> io::Result<[u8; 64]>
@@ -645,22 +656,23 @@ impl<T> MaybeUninit<T> {
645656
/// // ^^^^^^^^^^^^^^^^
646657
/// // (mutable) reference to uninitialized memory!
647658
/// // This is undefined behavior.
648-
/// Ok(buffer.assume_init())
659+
/// Ok(unsafe { buffer.assume_init() })
649660
/// }
650661
/// ```
651662
///
652-
/// Nor can you use direct field access to do field-by-field gradual initialization.
663+
/// Nor can you use direct field access to do field-by-field gradual initialization:
653664
///
654665
/// ```rust,no_run
655-
/// use std::mem::MaybeUninit;
666+
/// #![feature(maybe_uninit_ref)]
667+
/// use std::{mem::MaybeUninit, ptr};
656668
///
657669
/// struct Foo {
658670
/// a: u32,
659671
/// b: u8,
660672
/// }
661673
///
662674
/// let foo: Foo = unsafe {
663-
/// let foo = MaybeUninit::<Foo>::uninit();
675+
/// let mut foo = MaybeUninit::<Foo>::uninit();
664676
/// ptr::write(&mut foo.get_mut().a as *mut u32, 1337);
665677
/// // ^^^^^^^^^^^^^
666678
/// // (mutable) reference to uninitialized memory!

0 commit comments

Comments
 (0)