1  /* { dg-do run } */
       2  /* { dg-options "-O1" } */
       3  
       4  struct S1  {
       5          unsigned int _0;
       6          unsigned int _1;
       7  } ;
       8  struct S2  {
       9          struct S1 _s1;
      10          unsigned long _x2;
      11  } ;
      12  
      13  struct ufld_type1  {
      14          unsigned int _u1t;
      15          struct S2 _s2;
      16  } ;
      17  
      18  struct ufld_type2  {
      19          unsigned int _u2t;
      20          struct S1 _s1;
      21  } ;
      22  struct parm_type {
      23          union {
      24                  struct ufld_type1 var_1;
      25                  struct ufld_type2 var_2;
      26          } U;
      27  };
      28  
      29  struct parm_type  bad_function( struct parm_type arg0 )
      30  {
      31          struct parm_type rv;
      32          struct S2 var4;
      33          switch( arg0.U.var_2._u2t ) {
      34          case 4294967041:
      35                  var4._s1 = arg0.U.var_1._s2._s1;
      36                  rv.U.var_1._u1t = 4294967041;
      37                  rv.U.var_1._s2 = var4;
      38                  break;
      39          case 4294967043:
      40                  rv.U.var_2._u2t = 4294967043;
      41                  rv.U.var_2._s1 = arg0.U.var_2._s1;
      42                  break;
      43          default:
      44                  break;
      45          }
      46          return rv;
      47  }
      48  
      49  int main() {
      50          struct parm_type val;
      51          struct parm_type out;
      52          val.U.var_2._u2t = 4294967043;
      53          val.U.var_2._s1._0 = 0x01010101;
      54          val.U.var_2._s1._1 = 0x02020202;
      55          out = bad_function(val);
      56  	if (val.U.var_2._u2t != 4294967043)
      57  	  __builtin_abort ();
      58          if (out.U.var_2._s1._0 != 0x01010101)
      59  	  __builtin_abort ();
      60          if (val.U.var_2._s1._1 != 0x02020202 )
      61  	  __builtin_abort ();
      62  	return 0;
      63  }