https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67443
--- Comment #1 from wmi at google dot com --- Seems the patch makes some problem exposed. For the testcase 1.cxx below: typedef struct A { unsigned i : 8; unsigned j : 24; } A; void foo(A *a) { a->i = 3; a->j = 5; } The rtl generated by s390x-ibm-linux-g++ seems wrong. ~/workarea/gcc-r227524/build/install/bin/s390x-ibm-linux-g++ -O2 -S 1.cxx -fdump-rtl-expand-details-blocks (note 4 1 2 2 [bb 2] NOTE_INSN_BASIC_BLOCK) (insn 2 4 3 2 (set (reg/v/f:DI 60 [ a ]) (reg:DI 2 %r2 [ a ])) 4.cxx:6 -1 (nil)) (note 3 2 6 2 NOTE_INSN_FUNCTION_BEG) (insn 6 3 8 2 (set (mem/j:QI (reg/v/f:DI 60 [ a ]) [1 a_2(D)->i+0 S1 A32]) (const_int 3 [0x3])) 4.cxx:7 -1 (nil)) (insn 8 6 9 2 (set (reg:SI 62) (mem/j:SI (reg/v/f:DI 60 [ a ]) [1 a_2(D)->j+-1 S4 A32])) 4.cxx:8 -1 (nil)) (insn 9 8 10 2 (parallel [ (set (reg:SI 63) (and:SI (reg:SI 62) (const_int -16777216 [0xffffffffff000000]))) (clobber (reg:CC 33 %cc)) ]) 4.cxx:8 -1 (nil)) (insn 10 9 11 2 (parallel [ (set (reg:SI 64) (ior:SI (reg:SI 63) (const_int 5 [0x5]))) (clobber (reg:CC 33 %cc)) ]) 4.cxx:8 -1 (nil)) (insn 11 10 0 2 (set (mem/j:SI (reg/v/f:DI 60 [ a ]) [1 a_2(D)->j+-1 S4 A32]) (reg:SI 64)) 4.cxx:8 -1 (nil)) ;; succ: EXIT [100.0%] (FALLTHRU)