@@ -76,13 +76,18 @@ reading uninitialized memory is permitted are inside `union`s and in "padding"
7676[ dangling ] : #dangling-pointers
7777
7878A 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
8080part 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