Skip to content

Commit d4d5dfd

Browse files
authored
Merge pull request rust-lang#1186 from RalfJung/size-of-val
clarify that references size_of_val can never exceed isize::MAX
2 parents 87d3644 + 88b6a42 commit d4d5dfd

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

src/behavior-considered-undefined.md

+11-6
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,18 @@ reading uninitialized memory is permitted are inside `union`s and in "padding"
7676
[dangling]: #dangling-pointers
7777

7878
A reference/pointer is "dangling" if it is null or not all of the bytes it
79-
points to are part of the same allocation (so in particular they all have to be
79+
points to are part of the same live allocation (so in particular they all have to be
8080
part of *some* allocation). The span of bytes it points to is determined by the
81-
pointer value and the size of the pointee type (using `size_of_val`). As a
82-
consequence, if the span is empty, "dangling" is the same as "non-null". Note
83-
that slices and strings point to their entire range, so it is important that the length
84-
metadata is never too large. In particular, allocations and therefore slices and strings
85-
cannot be bigger than `isize::MAX` bytes.
81+
pointer value and the size of the pointee type (using `size_of_val`).
82+
83+
If the size is 0, then the pointer must either point inside of a live allocation
84+
(including pointing just after the last byte of the allocation), or it must be
85+
directly constructed from a non-zero integer literal.
86+
87+
Note that dynamically sized types (such as slices and strings) point to their
88+
entire range, so it is important that the length metadata is never too large. In
89+
particular, the dynamic size of a Rust value (as determined by `size_of_val`)
90+
must never exceed `isize::MAX`.
8691

8792
[`bool`]: types/boolean.md
8893
[`const`]: items/constant-items.md

0 commit comments

Comments
 (0)