@@ -76,13 +76,18 @@ reading uninitialized memory is permitted are inside `union`s and in "padding"
76
76
[ dangling ] : #dangling-pointers
77
77
78
78
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
80
80
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 ` .
86
91
87
92
[ `bool` ] : types/boolean.md
88
93
[ `const` ] : items/constant-items.md
0 commit comments