https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108268
--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Looking at GCC 12, I think no target actually stored anything into that last element unless it was a return or alternate return column. It is true that expand_builtin_init_dwarf_reg_sizes had: if (!init_state.wrote_return_column) init_return_column_size (mode, mem, DWARF_FRAME_RETURN_COLUMN); #ifdef DWARF_ALT_FRAME_RETURN_COLUMN init_return_column_size (mode, mem, DWARF_ALT_FRAME_RETURN_COLUMN); #endif which is what the new gcc tries to preserve. init_one_dwarf_reg_size had: const unsigned int dnum = DWARF_FRAME_REGNUM (regno); const unsigned int rnum = DWARF2_FRAME_REG_OUT (dnum, 1); const unsigned int dcol = DWARF_REG_TO_UNWIND_COLUMN (rnum); ... if (rnum >= DWARF_FRAME_REGISTERS) return; though, and seems DWARF_REG_TO_UNWIND_COLUMN always uses the default definition of just returning its argument, so I think init_one_dwarf_reg_size would never store to the last element. init_return_column_size can though. And TARGET_INIT_DWARF_REG_SIZES_EXTRA is only defined on msp430 and rs6000 and neither writes at offsets >= DWARF_FRAME_REGISTERS. So, I think the DWARF_FRAME_REGISTERS element should be considered into whether everything is constant/same size only if it is DWARF_FRAME_RETURN_COLUMN or DWARF_ATL_FRAME_RETURN_COLUMN.