Skip to content

Commit fca9d52

Browse files
authored
Merge pull request rust-lang#2290 from rust-lang/TC/generalize-wide-pointer-total-size-bound
Generalize the wide-pointer total-size bound
2 parents 9a10260 + 4a5f81c commit fca9d52

1 file changed

Lines changed: 6 additions & 1 deletion

File tree

src/behavior-considered-undefined.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,12 @@ r[undefined.validity.reference-box]
147147
r[undefined.validity.wide]
148148
* The [metadata] of a wide reference, [`Box<T>`], or raw pointer must match the type of the [unsized tail]:
149149
* `dyn Trait` metadata must be a pointer to a compiler-generated vtable for `Trait`. (For raw pointers, this requirement remains a subject of some debate.)
150-
* Slice (`[T]`) and `str` metadata must be a valid `usize`. Furthermore, for wide references and [`Box<T>`], this metadata is invalid if it makes the total size of the pointed-to value bigger than `isize::MAX`.
150+
* Slice (`[T]`) and `str` metadata must be a valid `usize`.
151+
152+
In addition, for a wide reference or [`Box<T>`], the metadata is invalid if it makes the total size of the pointed-to value (as determined by `size_of_val`) bigger than `isize::MAX`.
153+
154+
> [!NOTE]
155+
> This bound is on the size of the entire pointed-to value, not just its unsized tail, and it constrains `dyn Trait` metadata just as it does a slice or `str` length. A valid vtable describes an erased type no larger than `isize::MAX`, but a sized prefix can still carry the total past the limit.
151156
152157
r[undefined.validity.valid-range]
153158
* If a type has a custom range of valid values, then a valid value must be in that range. In the standard library, this affects [`NonNull<T>`] and [`NonZero<T>`].

0 commit comments

Comments
 (0)