A type's size must always be a multiple of its alignment. This ensures that an array of that type may always be indexed by offsetting by a multiple of its size.
This wording is ambiguous with respect to zero-sized types. One reading of it (which was my interpretation for years) is that a type's size must be a non-zero multiple of its alignment in order to satisfy the array indexing requirement. In fact, the reality is that the size may be zero regardless of the alignment. It would be good to clarify the wording to make that clear.
On the repr(Rust) page, it reads:
This wording is ambiguous with respect to zero-sized types. One reading of it (which was my interpretation for years) is that a type's size must be a non-zero multiple of its alignment in order to satisfy the array indexing requirement. In fact, the reality is that the size may be zero regardless of the alignment. It would be good to clarify the wording to make that clear.
cc @jswrenn