The ABI should also specify the size/alignment of C11 atomic types. E.g.:
typedef _Atomic struct {char x[32];} Atomic32char;
_Static_assert(sizeof(Atomic32char) == 32);
_Static_assert(_Alignof(Atomic32char) == 1);
typedef _Atomic struct {char x[4];} Atomic3char;
_Static_assert(sizeof(Atomic4char) == 4);
_Static_assert(_Alignof(Atomic4char) == 4);
typedef _Atomic struct {char x[3];} Atomic3char;
_Static_assert(sizeof(Atomic3char) == ???); // 3 on GCC, 4 on Clang
_Static_assert(_Alignof(Atomic3char) == ???); // 1 on GCC, 4 on Clang.
Currently, Clang's "_Atomic" type modifier will add padding to a non-power-of-2 object, up to 16-bytes, in order to allow it to become lock-free. GCC never adds padding to _Atomic. Both compilers will increase the alignment of a power-of-2-sized type up to 16 bytes.