// This testcase caused ICE on IA-32 in simplify_unary_operation // CSE did not assume SUBREGs changing mode from integral to floating. // { dg-do run { target i?86-*-* sparc*-*-* x86_64-*-* } } // { dg-options "-O2" } struct A { union { float f; unsigned int w; } a; static inline const A foo (void) { return A ((unsigned int) (__extension__ ((union { unsigned l; float d; }) { l: 0x3f800000 }).d)); } inline A (float f) { a.f = f; } A (); inline A (unsigned int w) { a.w = w; } }; A::A() { *this = foo (); } A a; extern "C" void abort (void); extern "C" void exit (int); int main () { if (a.a.w != 1) abort (); exit (0); }