Hi! Apparently I broke bootstrap or testing on big-endian targets, I'm sorry for screwing up testing and not testing on any big-endian.
I've committed the following patch which fixes miscompilation on the following short testcase: struct S { char a, b, c, d; } s; struct T { int a : 2, b : 5, c : 17, d : 8; } t, t2; __attribute__((noipa)) void foo (void) { s.a = 1; s.b = 2; s.c = 3; s.d = 4; } __attribute__((noipa)) void bar (void) { t.a = 1; t.b = 2; t.c = 3; t.d = 4; } __attribute__((noipa)) void baz (void) { t.a = -2; t.c = 7; t.d = 8; } int main () { foo (); if (s.a != 1 || s.b != 2 || s.c != 3 || s.d != 4) __builtin_abort (); bar (); if (t.a != 1 || t.b != 2 || t.c != 3 || t.d != 4) __builtin_abort (); baz (); if (t.a != -2 || t.b != 2 || t.c != 7 || t.d != 8) __builtin_abort (); __builtin_memset (&t, 0, sizeof (t)); baz (); if (t.a != -2 || t.b != 0 || t.c != 7 || t.d != 8) __builtin_abort (); __builtin_memset (&t, -1, sizeof (t)); baz (); if (t.a != -2 || t.b != -1 || t.c != 7 || t.d != 8) __builtin_abort (); return 0; } as obvious to unbreak bootstrap. David said his AIX bootstrap is past the bootstrap failure point now with this change. 2017-10-30 Jakub Jelinek <ja...@redhat.com> PR middle-end/22141 * gimple-ssa-store-merging.c (merged_store_group::apply_stores): Fix arguments to clear_bit_region_be. --- gcc/gimple-ssa-store-merging.c.jj 2017-10-30 12:03:56.601219516 +0100 +++ gcc/gimple-ssa-store-merging.c 2017-10-30 17:03:55.713149323 +0100 @@ -701,7 +701,9 @@ merged_store_group::apply_stores () return false; unsigned char *m = mask + (pos_in_buffer / BITS_PER_UNIT); if (BYTES_BIG_ENDIAN) - clear_bit_region_be (m, pos_in_buffer % BITS_PER_UNIT, info->bitsize); + clear_bit_region_be (m, (BITS_PER_UNIT - 1 + - (pos_in_buffer % BITS_PER_UNIT)), + info->bitsize); else clear_bit_region (m, pos_in_buffer % BITS_PER_UNIT, info->bitsize); } Jakub