diff options
| author | bors <bors@rust-lang.org> | 2021-02-25 21:34:55 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-02-25 21:34:55 +0000 |
| commit | c0a54cc4eb6111cac9ad75cc439f75b79698b4a7 (patch) | |
| tree | c53ca0c588422e538c94226dcb0a3f81c86c433a /library/alloc/src/vec | |
| parent | 98f8cce6db6c6c6660eeffee2b3903104e547ecf (diff) | |
| parent | 42e53ff8adf8a4c7ab8d5f87816e30405a1ec9e2 (diff) | |
Auto merge of #82530 - Aaron1011:rollup-aalwq15, r=Aaron1011
Rollup of 11 pull requests Successful merges: - #82269 (Cleanup `PpMode` and friends) - #82431 (Set RUST_BACKTRACE=0 when running `treat-err-as-bug` tests) - #82441 (Fix typo in sanitizer flag in unstable book.) - #82463 (panic_bounds_checks should be panic_bounds_check) - #82464 (Update outdated comment in unix Command.) - #82467 (library: Normalize safety-for-unsafe-block comments) - #82468 (Move pick_by_value_method docs above function header) - #82484 (rustdoc: Remove duplicate "List of all items") - #82502 (Only look for HTML `tidy` when running rustdoc tests) - #82503 (fix typo in `pre-commit.sh`) - #82510 (Fix typo in `param_env_reveal_all_normalized`) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'library/alloc/src/vec')
| -rw-r--r-- | library/alloc/src/vec/mod.rs | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/library/alloc/src/vec/mod.rs b/library/alloc/src/vec/mod.rs index dbb7708b600..b1b26194283 100644 --- a/library/alloc/src/vec/mod.rs +++ b/library/alloc/src/vec/mod.rs @@ -1938,13 +1938,13 @@ impl<T, A: Allocator> Vec<T, A> { pub fn split_at_spare_mut(&mut self) -> (&mut [T], &mut [MaybeUninit<T>]) { let ptr = self.as_mut_ptr(); - // Safety: + // SAFETY: // - `ptr` is guaranteed to be in bounds for `capacity` elements // - `len` is guaranteed to less or equal to `capacity` // - `MaybeUninit<T>` has the same layout as `T` let spare_ptr = unsafe { ptr.cast::<MaybeUninit<T>>().add(self.len) }; - // Safety: + // SAFETY: // - `ptr` is guaranteed to be valid for `len` elements // - `spare_ptr` is offseted from `ptr` by `len`, so it doesn't overlap `initialized` slice unsafe { @@ -2154,7 +2154,8 @@ pub fn from_elem_in<T: Clone, A: Allocator>(elem: T, n: usize, alloc: A) -> Vec< } trait ExtendFromWithinSpec { - /// Safety: + /// # Safety + /// /// - `src` needs to be valid index /// - `self.capacity() - self.len()` must be `>= src.len()` unsafe fn spec_extend_from_within(&mut self, src: Range<usize>); @@ -2165,14 +2166,14 @@ impl<T: Clone, A: Allocator> ExtendFromWithinSpec for Vec<T, A> { let initialized = { let (this, spare) = self.split_at_spare_mut(); - // Safety: + // SAFETY: // - caller guaratees that src is a valid index let to_clone = unsafe { this.get_unchecked(src) }; to_clone.iter().cloned().zip(spare.iter_mut()).map(|(e, s)| s.write(e)).count() }; - // Safety: + // SAFETY: // - elements were just initialized unsafe { let new_len = self.len() + initialized; @@ -2187,11 +2188,11 @@ impl<T: Copy, A: Allocator> ExtendFromWithinSpec for Vec<T, A> { { let (init, spare) = self.split_at_spare_mut(); - // Safety: + // SAFETY: // - caller guaratees that `src` is a valid index let source = unsafe { init.get_unchecked(src) }; - // Safety: + // SAFETY: // - Both pointers are created from unique slice references (`&mut [_]`) // so they are valid and do not overlap. // - Elements are :Copy so it's OK to to copy them, without doing @@ -2203,7 +2204,7 @@ impl<T: Copy, A: Allocator> ExtendFromWithinSpec for Vec<T, A> { unsafe { ptr::copy_nonoverlapping(source.as_ptr(), spare.as_mut_ptr() as _, count) }; } - // Safety: + // SAFETY: // - The elements were just initialized by `copy_nonoverlapping` self.len += count; } |
