[resending to -hackers sorry] Back in 2001 a hack to add __attribute__((packed)) to ItemPtr was added with a comment "Appropriate whack upside the head for ARM" (dcbbdb1b3ee). I don't know if this is still a factor in 2016 or not but it has already resulted in some collateral damage in 2015 when some compiler took that as license to align the whole struct on single byte alignment when it was buried inside another struct (d4b538ea367de).
I just tried compiling with Clang 3.8.0 and got tons of warnings about this because: 'ItemPointerData' may result in an unaligned pointer value [-Waddress-of-packed-member] ...ItemPointerGetBlockNumber(&(xlrec->target_tid)), ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ../../../src/include/storage/itemptr.h:69:25: note: expanded from macro 'ItemPointerGetBlockNumber' BlockIdGetBlockNumber(&(pointer)->ip_blkid) \ ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~ ../../../src/include/storage/block.h:118:19: note: expanded from macro 'BlockIdGetBlockNumber' (BlockNumber) (((blockId)->bi_hi << 16) | ((uint16) (blockId)->bi_lo)) \ ^~~~~~~ Which seems to indicate that clang may not understand the "pg_attribute_aligned(2)" or perhaps it does and just doesn't take it into account when generating these warnings. I'm sure there are other people testing clang -- isn't it the default on MacOS? Do they not see these warnings? -- greg -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers