1  /* PR target/78904 */
       2  /* { dg-do assemble { target { ! ia32 } } } */
       3  /* { dg-options "-O2" } */
       4  
       5  typedef __SIZE_TYPE__ size_t;
       6  
       7  struct S1
       8  {
       9    unsigned char pad1;
      10    unsigned char val;
      11    unsigned short pad2;
      12    unsigned int pad3;
      13  };
      14  
      15  extern struct S1 t[256];
      16  
      17  struct S1 test_and (struct S1 a, size_t i)
      18  {
      19    a.val &= t[i].val;
      20  
      21    return a;
      22  }
      23  
      24  struct S1 test_or (struct S1 a, size_t i)
      25  {
      26    a.val |= t[i].val;
      27  
      28    return a;
      29  }
      30  
      31  struct S1 test_xor (struct S1 a, size_t i)
      32  {
      33    a.val ^= t[i].val;
      34  
      35    return a;
      36  }
      37  
      38  struct S1 test_add (struct S1 a, size_t i)
      39  {
      40    a.val += t[i].val;
      41  
      42    return a;
      43  }