2009-07-17 Richard Guenther <rguenther@suse.de>
[official-gcc.git] / gcc / testsuite / g++.dg / ext / alias-canon2.C
blob4833db852d3338acb560bbe5872e5a51da259579
1 // { dg-do compile }
2 // PR c++/37553
3 typedef unsigned int ui32;
4 __extension__ typedef unsigned long long int ui64;
6 typedef ui32 __attribute__ ((__may_alias__)) ui32a;
7 typedef ui64 __attribute__ ((__may_alias__)) ui64a;
9 union u_u32
11   ui32a v;
12 } __attribute__ ((__may_alias__));
14 union u_u64
16   ui64a v;
17   struct
18   {
19     union u_u32 lo32, hi32;
20   } u;
21 } __attribute__ ((__may_alias__));
23 void
24 out_long (ui64 longVal)
26   if ((*(union u_u64 *) &longVal).u.lo32.v < 0x10000000ul)
27     {
28       if ((ui32) ((*(union u_u64 *) &longVal).u.lo32.v) < 0x4000u)
29         {
30           /* do something useful */
31         }
32     }
35 void f(ui32 *) { }
36 void f(ui32a *) { }