https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78128
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Blocks| |71002 --- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- The issue is ;; e_11(D)->ts.kind = _1; (insn 20 19 0 (set (mem:SI (reg/f:DI 356) [4 e_11(D)->ts.kind+0 S4 A32]) (reg:SI 340 [ _1 ])) "t.i":39 -1 (nil)) vs. ;; _3 = BIT_FIELD_REF <MEM[(bt *)e_11(D)], 64, 0>; (insn 21 20 0 (set (reg:DI 342 [ _3 ]) (mem:DI (reg/v/f:DI 349 [ e ]) [3 MEM[(bt *)e_11(D)]+0 S8 A64])) "t.i":40 -1 (nil)) which use different alias sets. Index: gcc/fold-const.c =================================================================== --- gcc/fold-const.c (revision 241509) +++ gcc/fold-const.c (working copy) @@ -3809,7 +3809,8 @@ make_bit_field_ref (location_t loc, tree { tree result, bftype; - if (get_alias_set (inner) != get_alias_set (orig_inner)) + if (! alias_set_subset_of (get_alias_set (orig_inner), + get_alias_set (inner))) inner = fold_build2 (MEM_REF, TREE_TYPE (inner), build_fold_addr_expr (inner), build_int_cst should fix it Referenced Bugs: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71002 [Bug 71002] [6 Regression] -fstrict-aliasing breaks Boost's short string optimization implementation