Add initial support for unsized MaybeUninit
wrapper type (#2055)
#2310
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is achieved by adding a
MaybeUninit
associated type toKnownLayout
, whose layout is identical toSelf
except that it admits uninitialized bytes in all positions.For sized types, this is bound to
mem::MaybeUninit<Self>
. For potentially unsized structs, we synthesize a doppelganger with the samerepr
, whose leading fields are wrapped inmem::MaybeUninit
and whose trailing field is theMaybeUninit
associated type of struct's original trailing field type. This type-level recursion bottoms out at[T]
, whoseMaybeUninit
associated type is bound to[mem::MaybeUninit<T>]
.Makes progress towards #1797
SKIP_CARGO_SEMVER_CHECKS=1
gherrit-pr-id: Idfc357094e28b54a15d947141241ca2da83dcc91