diff options
| author | Ralf Jung <post@ralfj.de> | 2020-10-28 09:05:45 +0100 |
|---|---|---|
| committer | Ralf Jung <post@ralfj.de> | 2020-10-28 11:08:21 +0100 |
| commit | b0df3f76dc70eba57d6e0665fa6ccac89b25d3aa (patch) | |
| tree | 6bfdb93558714179ed927f55d2c27555a305d6d1 | |
| parent | 824f900a96d752da2d882863c65f9736e5f2b347 (diff) | |
| download | rust-b0df3f76dc70eba57d6e0665fa6ccac89b25d3aa.tar.gz rust-b0df3f76dc70eba57d6e0665fa6ccac89b25d3aa.zip | |
fix some incorrect aliasing in the BTree
| -rw-r--r-- | library/alloc/src/collections/btree/node.rs | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/library/alloc/src/collections/btree/node.rs b/library/alloc/src/collections/btree/node.rs index c8d3de9e5cd..433074027e7 100644 --- a/library/alloc/src/collections/btree/node.rs +++ b/library/alloc/src/collections/btree/node.rs @@ -1608,15 +1608,19 @@ pub mod marker { unsafe fn slice_insert<T>(slice: &mut [T], idx: usize, val: T) { unsafe { - ptr::copy(slice.as_ptr().add(idx), slice.as_mut_ptr().add(idx + 1), slice.len() - idx); - ptr::write(slice.get_unchecked_mut(idx), val); + let len = slice.len(); + let slice_ptr = slice.as_mut_ptr(); + ptr::copy(slice_ptr.add(idx), slice_ptr.add(idx + 1), len - idx); + ptr::write(slice_ptr.add(idx), val); } } unsafe fn slice_remove<T>(slice: &mut [T], idx: usize) -> T { unsafe { - let ret = ptr::read(slice.get_unchecked(idx)); - ptr::copy(slice.as_ptr().add(idx + 1), slice.as_mut_ptr().add(idx), slice.len() - idx - 1); + let len = slice.len(); + let slice_ptr = slice.as_mut_ptr(); + let ret = ptr::read(slice_ptr.add(idx)); + ptr::copy(slice_ptr.add(idx + 1), slice_ptr.add(idx), len - idx - 1); ret } } |
