/* Copyright (C) 2000 Free Software Foundation, Inc. Contributed by Nathan Sidwell 23 Feb 2000 */ /* __alignof__ should never return a non-power of 2 eg, sizeof(long double) might be 12, but that means it must be alignable on a 4 byte boundary. */ void check (char const *type, int align) { if ((align & -align) != align) { abort (); } } #define QUOTE_(s) #s #define QUOTE(s) QUOTE_(s) #define check(t) check(QUOTE(t), __alignof__(t)) // This struct should have an alignment of the lcm of all the types. If one of // the base alignments is not a power of two, then A cannot be power of two // aligned. struct A { char c; signed short ss; unsigned short us; signed int si; unsigned int ui; signed long sl; unsigned long ul; signed long long sll; unsigned long long ull; float f; double d; long double ld; void *dp; void (*fp)(); }; int main () { check (void); check (char); check (signed short); check (unsigned short); check (signed int); check (unsigned int); check (signed long); check (unsigned long); check (signed long long); check (unsigned long long); check (float); check (double); check (long double); check (void *); check (void (*)()); check (struct A); return 0; }