mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-29 02:03:53 +00:00
Rollup merge of #117039 - scottmcm:clarify-get-unchecked, r=cuviper
Clarify UB in `get_unchecked(_mut)` Inspired by #116915, it was unclear to me what exactly "out-of-bounds index" means in `get_unchecked`. One could [potentially](https://rust.godbolt.org/z/hxM764orW) interpret it that `get_unchecked` is just another way to write `offset`, but I think `get_unchecked(len)` is supposed to be UB even though `.offet(len)` is well-defined (as is `.get_unchecked(..len)`), so write that more directly in the docs. **libs-api folks**: Can you confirm whether this is what you expect this to mean? And is the situation any different for `<*const [T]>::get_unchecked`?
This commit is contained in:
commit
7096ec3e00
@ -640,6 +640,11 @@ impl<T> [T] {
|
||||
/// Calling this method with an out-of-bounds index is *[undefined behavior]*
|
||||
/// even if the resulting reference is not used.
|
||||
///
|
||||
/// You can think of this like `.get(index).unwrap_unchecked()`. It's UB
|
||||
/// to call `.get_unchecked(len)`, even if you immediately convert to a
|
||||
/// pointer. And it's UB to call `.get_unchecked(..len + 1)`,
|
||||
/// `.get_unchecked(..=len)`, or similar.
|
||||
///
|
||||
/// [`get`]: slice::get
|
||||
/// [undefined behavior]: https://doc.rust-lang.org/reference/behavior-considered-undefined.html
|
||||
///
|
||||
@ -675,6 +680,11 @@ impl<T> [T] {
|
||||
/// Calling this method with an out-of-bounds index is *[undefined behavior]*
|
||||
/// even if the resulting reference is not used.
|
||||
///
|
||||
/// You can think of this like `.get_mut(index).unwrap_unchecked()`. It's
|
||||
/// UB to call `.get_unchecked_mut(len)`, even if you immediately convert
|
||||
/// to a pointer. And it's UB to call `.get_unchecked_mut(..len + 1)`,
|
||||
/// `.get_unchecked_mut(..=len)`, or similar.
|
||||
///
|
||||
/// [`get_mut`]: slice::get_mut
|
||||
/// [undefined behavior]: https://doc.rust-lang.org/reference/behavior-considered-undefined.html
|
||||
///
|
||||
|
Loading…
Reference in New Issue
Block a user