Hi, On Wed, 18 Jan 2017, Richard Henderson wrote:
> > Section 3 Rationale, alternative 1: I'm wondering if the example is > > correct. For a 4-byte-aligned type of size 3, the implementation > > cannot simply use 4-byte hardware-backed atomics because this will > > inevitably touch the 4th byte I think, and the implementation can't > > know whether this is padding or not. Or do we expect that things like > > packed structs are disallowed? > > If we atomically store an unchanged value into the 4th byte, can we > tell? You can't have a 4-aligned type of size 3. Sizes must be multiples of alignment (otherwise arrays don't work). The type of a 3-sized field in a packed struct that syntactically might be a 4-aligned type (e.g. by using attributes on char-array types) is actually a different type having an alignment of 1. It's easier to simply regard all types inside packed structs as 1-aligned (which is IMO what we try to do). That is, the byte after a 4-aligned "3-sized" type is always padding. Ciao, Michael.