40 lines
697 B
C
40 lines
697 B
C
// 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);
|
|
}
|