/* PR target/78904 */ /* { dg-do assemble } */ /* { dg-options "-O2" } */ typedef __SIZE_TYPE__ size_t; struct S1 { unsigned char pad1; unsigned char val; unsigned short pad2; }; extern struct S1 t[256]; struct S1 test_and (struct S1 a, size_t i) { a.val &= t[i].val; return a; } struct S1 test_or (struct S1 a, size_t i) { a.val |= t[i].val; return a; } struct S1 test_xor (struct S1 a, size_t i) { a.val ^= t[i].val; return a; } struct S1 test_add (struct S1 a, size_t i) { a.val += t[i].val; return a; }