64 lines
1.4 KiB
C
64 lines
1.4 KiB
C
/* { dg-do run } */
|
|
/* { dg-options "-O1" } */
|
|
|
|
struct S1 {
|
|
unsigned int _0;
|
|
unsigned int _1;
|
|
} ;
|
|
struct S2 {
|
|
struct S1 _s1;
|
|
unsigned long _x2;
|
|
} ;
|
|
|
|
struct ufld_type1 {
|
|
unsigned int _u1t;
|
|
struct S2 _s2;
|
|
} ;
|
|
|
|
struct ufld_type2 {
|
|
unsigned int _u2t;
|
|
struct S1 _s1;
|
|
} ;
|
|
struct parm_type {
|
|
union {
|
|
struct ufld_type1 var_1;
|
|
struct ufld_type2 var_2;
|
|
} U;
|
|
};
|
|
|
|
struct parm_type bad_function( struct parm_type arg0 )
|
|
{
|
|
struct parm_type rv;
|
|
struct S2 var4;
|
|
switch( arg0.U.var_2._u2t ) {
|
|
case 4294967041:
|
|
var4._s1 = arg0.U.var_1._s2._s1;
|
|
rv.U.var_1._u1t = 4294967041;
|
|
rv.U.var_1._s2 = var4;
|
|
break;
|
|
case 4294967043:
|
|
rv.U.var_2._u2t = 4294967043;
|
|
rv.U.var_2._s1 = arg0.U.var_2._s1;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
return rv;
|
|
}
|
|
|
|
int main() {
|
|
struct parm_type val;
|
|
struct parm_type out;
|
|
val.U.var_2._u2t = 4294967043;
|
|
val.U.var_2._s1._0 = 0x01010101;
|
|
val.U.var_2._s1._1 = 0x02020202;
|
|
out = bad_function(val);
|
|
if (val.U.var_2._u2t != 4294967043)
|
|
__builtin_abort ();
|
|
if (out.U.var_2._s1._0 != 0x01010101)
|
|
__builtin_abort ();
|
|
if (val.U.var_2._s1._1 != 0x02020202 )
|
|
__builtin_abort ();
|
|
return 0;
|
|
}
|