Clarify niche optimization on enums with reprs (#315)

pull/317/head
Josh Triplett 3 years ago committed by GitHub
parent e0aa678dee
commit 7cf00d4381
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -91,7 +91,7 @@ manipulate its tag and fields. See [the RFC][really-tagged] for details.
These `repr`s have no effect on a struct. These `repr`s have no effect on a struct.
Adding an explicit `repr(u*)`, `repr(i*)`, or `repr(C)` to an enum suppresses the null-pointer optimization, like: Adding an explicit `repr(u*)`, `repr(i*)`, or `repr(C)` to an enum with fields suppresses the null-pointer optimization, like:
```rust ```rust
# use std::mem::size_of; # use std::mem::size_of;
@ -110,6 +110,8 @@ assert_eq!(8, size_of::<MyOption<&u16>>());
assert_eq!(16, size_of::<MyReprOption<&u16>>()); assert_eq!(16, size_of::<MyReprOption<&u16>>());
``` ```
This optimization still applies to fieldless enums with an explicit `repr(u*)`, `repr(i*)`, or `repr(C)`.
## repr(packed) ## repr(packed)
`repr(packed)` forces Rust to strip any padding, and only align the type to a `repr(packed)` forces Rust to strip any padding, and only align the type to a

Loading…
Cancel
Save