https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66812
--- Comment #2 from David Malcolm <dmalcolm at gcc dot gnu.org> --- Output from fre1 dump (at e.g. optlevel 3) (with TDF_DETAILS enabled) is: ;; Function test_pr66812 (test_pr66812, funcdef_no=0, decl_uid=56, cgraph_uid=0, symbol_order=0) Setting value number of .MEM_4(D) to .MEM_4(D) (changed) Value numbering .MEM_5 stmt = MEM[(struct value *)arr_2(D) + 16B].union_field.i_field = 0; RHS 0 simplified to 0 No store match Value numbering store MEM[(struct value *)arr_2(D) + 16B].union_field.i_field to 0 Setting value number of .MEM_5 to .MEM_5 (changed) Value numbering .MEM_8 stmt = MEM[(struct value *)arr_2(D) + 16B].type_code = 0; RHS 0 simplified to 0 No store match Value numbering store MEM[(struct value *)arr_2(D) + 16B].type_code to 0 Setting value number of .MEM_8 to .MEM_8 (changed) Value numbering .MEM_11 stmt = MEM[(struct value *)arr_2(D) + 16B].union_field.ll_field = 10; RHS 10 simplified to 10 No store match Value numbering store MEM[(struct value *)arr_2(D) + 16B].union_field.ll_field to 10 Setting value number of .MEM_11 to .MEM_11 (changed) Value numbering .MEM_14 stmt = MEM[(struct value *)arr_2(D) + 16B].type_code = 19; RHS 19 simplified to 19 No store match Value numbering store MEM[(struct value *)arr_2(D) + 16B].type_code to 19 Setting value number of .MEM_14 to .MEM_14 (changed) Value numbering .MEM_17 stmt = MEM[(struct value *)arr_2(D) + 16B].union_field.i_field = 0; RHS 0 simplified to 0 No store match Value numbering store MEM[(struct value *)arr_2(D) + 16B].union_field.i_field to 0 Setting value number of .MEM_17 to .MEM_17 (changed) Value numbering .MEM_20 stmt = MEM[(struct value *)arr_2(D) + 16B].type_code = 0; RHS 0 simplified to 0 No store match Value numbering store MEM[(struct value *)arr_2(D) + 16B].type_code to 0 Setting value number of .MEM_20 to .MEM_20 (changed) Value numbers: Deleted redundant store MEM[(struct value *)arr_2(D) + 16B].union_field.i_field = 0; Removing dead stmt MEM[(struct value *)arr_2(D) + 16B].union_field.i_field = 0; test_pr66812 (struct value * arr) { <L0>: MEM[(struct value *)arr_2(D) + 16B].union_field.i_field = 0; MEM[(struct value *)arr_2(D) + 16B].type_code = 0; MEM[(struct value *)arr_2(D) + 16B].union_field.ll_field = 10; MEM[(struct value *)arr_2(D) + 16B].type_code = 19; MEM[(struct value *)arr_2(D) + 16B].type_code = 0; return; }