Viewing file: 20000223-1.c (1.27 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* Copyright (C) 2000 Free Software Foundation, Inc. Contributed by Nathan Sidwell 23 Feb 2000 <nathan@codesourcery.com> */
/* __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; }
|