Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/exotic-sizes.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,9 +106,9 @@ consequence of types with no size. In particular, pointer offsets are no-ops,
and allocators typically [require a non-zero size][alloc].

Note that references to ZSTs (including empty slices), just like all other
references, must be non-null and suitably aligned. Dereferencing a null or
unaligned pointer to a ZST is [undefined behavior][ub], just like for any other
type.
references, must be non-null and suitably aligned. However, dereferencing a
null pointer to a ZST is not [undefined behavior][ub], unlike pointers to
other types.
Copy link
Member

@RalfJung RalfJung Oct 19, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In fact dereferencing (as in, using the * operator on) a null pointer is never UB. addr_of!(*ptr) is always safe, even if ptr is null.

Only non-zero-sized loads, non-zero-sized stores, and field projections at non-zero field offsets have any requirements.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've changed it to say "loading or storing through a null pointer to a ZST"


[alloc]: ../std/alloc/trait.GlobalAlloc.html#tymethod.alloc
[ub]: what-unsafe-does.html
Expand Down