// Skip if not target: i?86-*-linux* i?86-*-freebsd* // Special g++ Options: -malign-double // Origin: Alex Samuel /* Test the size and alignment of fundamental C types for compliance with the IA-64 ABI. */ template inline unsigned alignmentof () { struct S { char start_; T object_; }; return (unsigned) & ((S *) 0)->object_; } /* Computes the alignment, in bytes, of TYPE. */ #define alignof(type) (alignmentof ()) enum A { a }; int main () { if (sizeof (char) != 1) return 1; if (alignof (char) != 1) return 2; if (sizeof (signed char) != 1) return 3; if (alignof (signed char) != 1) return 4; if (sizeof (unsigned char) != 1) return 5; if (alignof (unsigned char) != 1) return 6; if (sizeof (short) != 2) return 7; if (alignof (short) != 2) return 8; if (sizeof (signed short) != 2) return 9; if (alignof (signed short) != 2) return 10; if (sizeof (unsigned short) != 2) return 11; if (alignof (unsigned short) != 2) return 12; if (sizeof (int) != 4) return 13; if (alignof (int) != 4) return 14; if (sizeof (signed int) != 4) return 15; if (alignof (signed int) != 4) return 16; if (sizeof (unsigned int) != 4) return 17; if (alignof (unsigned int) != 4) return 18; if (sizeof (enum A) != 4) return 19; if (alignof (enum A) != 4) return 20; #ifdef HAVE_IA64_TYPES if (sizeof (__int64) != 8) return 21; if (alignof (__int64) != 8) return 22; if (sizeof (signed __int64) != 8) return 23; if (alignof (signed ___int64) != 8) return 24; if (sizeof (unsigned __int64) != 8) return 25; if (alignof (unsigned __int64) != 8) return 26; if (sizeof (__int128) != 16) return 27; if (alignof (__int128) != 16) return 28; if (sizeof (signed __int128) != 16) return 29; if (alignof (signed ___int128) != 16) return 30; if (sizeof (unsigned __int128) != 16) return 31; if (alignof (unsigned ___int128) != 16) return 32; #endif /* HAVE_IA64_TYPES */ if (sizeof (void *) != 4) return 33; if (alignof (void *) != 4) return 34; if (sizeof (void (*) ()) != 4) return 35; if (alignof (void (*) ()) != 4) return 36; if (sizeof (float) != 4) return 37; if (alignof (float) != 4) return 38; if (sizeof (double) != 8) return 39; if (alignof (double) != 8) return 40; #ifdef HAVE_IA64_TYPES if (sizeof (__float80) != 16) return 41; if (alignof (__float80) != 16) return 42; if (sizeof (__float128) != 16) return 43; if (alignof (__float128) != 16) return 44; #endif /* HAVE_IA64_TYPES */ return 0; }