1 /* Copyright (C) 2000 Free Software Foundation, Inc.
2    Contributed by Nathan Sidwell 23 Feb 2000 <nathan@codesourcery.com> */
3 
4 /* __alignof__ should never return a non-power of 2
5    eg, sizeof(long double) might be 12, but that means it must be alignable
6    on a 4 byte boundary. */
7 
check(char const * type,int align)8 void check (char const *type, int align)
9 {
10   if ((align & -align) != align)
11     {
12       abort ();
13     }
14 }
15 
16 #define QUOTE_(s) #s
17 #define QUOTE(s) QUOTE_(s)
18 
19 #define check(t) check(QUOTE(t), __alignof__(t))
20 
21 // This struct should have an alignment of the lcm of all the types. If one of
22 // the base alignments is not a power of two, then A cannot be power of two
23 // aligned.
24 struct A
25 {
26   char c;
27   signed short ss;
28   unsigned short us;
29   signed int si;
30   unsigned int ui;
31   signed long sl;
32   unsigned long ul;
33   signed long long sll;
34   unsigned long long ull;
35   float f;
36   double d;
37   long double ld;
38   void *dp;
39   void (*fp)();
40 };
41 
main()42 int main ()
43 {
44   check (void);
45   check (char);
46   check (signed short);
47   check (unsigned short);
48   check (signed int);
49   check (unsigned int);
50   check (signed long);
51   check (unsigned long);
52   check (signed long long);
53   check (unsigned long long);
54   check (float);
55   check (double);
56   check (long double);
57   check (void *);
58   check (void (*)());
59   check (struct A);
60   return 0;
61 }
62