dwarf2out.c:multiple_reg_loc_descriptor has the code: size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0))); loc_result = NULL;
for (i = 0; i < XVECLEN (regs, 0); ++i) { dw_loc_descr_ref t; t = one_reg_loc_descriptor (REGNO (XVECEXP (regs, 0, i)), VAR_INIT_STATUS_INITIALIZED); add_loc_descr (&loc_result, t); size = GET_MODE_SIZE (GET_MODE (XVECEXP (regs, 0, 0))); add_loc_descr_op_piece (&loc_result, size); } if (loc_result && initialized == VAR_INIT_STATUS_UNINITIALIZED) add_loc_descr (&loc_result, new_loc_descr (DW_OP_GNU_uninit, 0, 0)); return loc_result; The "loc_result &&" check makes it seem as though we're trying to cope with cases XVECLEN is zero, but that only works if the first (dead) load of XEXVECP (regs, 0, 0) is optimised away. Is a length of 0 valid in this context? If not, should we assert for it? Also, is the size assignment in the loop supposed to always read element 0, or is it a typo for XVECEXP (regs, 0, i)? Richard