This code triggers an ICE in gcc-4.3.1 on i686 when compiled with g++: typedef unsigned int ui32; __extension__ typedef unsigned long long int ui64;
typedef ui32 __attribute__ ((__may_alias__)) ui32a; typedef ui64 __attribute__ ((__may_alias__)) ui64a; union u_u32 { ui32a v; } __attribute__ ((__may_alias__)); union u_u64 { ui64a v; struct { union u_u32 lo32, hi32; } u; } __attribute__ ((__may_alias__)); void out_long (ui64 longVal) { if ((*(union u_u64 *) &longVal).u.lo32.v < 0x10000000ul) { if ((ui32) ((*(union u_u64 *) &longVal).u.lo32.v) < 0x4000u) { /* do something useful */ } } } longs3.c: In function 'void out_long(ui64)': longs3.c:24: internal compiler error: in build_c_cast, at cp/typeck.c:5631 -- Summary: ICE in build_c_cast Product: gcc Version: 4.3.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: patrakov at gmail dot com GCC build triplet: i686-pc-linux-gnu GCC host triplet: i686-pc-linux-gnu GCC target triplet: i686-pc-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37553