Hi! output_view_list_offset does: if (dwarf_split_debug_info) dw2_asm_output_delta (DWARF_OFFSET_SIZE, sym, loc_section_label, "%s", dwarf_attr_name (a->dw_attr)); else dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section, "%s", dwarf_attr_name (a->dw_attr)); while output_loc_list_offset does: if (!dwarf_split_debug_info) dw2_asm_output_offset (DWARF_OFFSET_SIZE, sym, debug_loc_section, "%s", dwarf_attr_name (a->dw_attr)); else if (dwarf_version >= 5) { gcc_assert (AT_loc_list (a)->num_assigned); dw2_asm_output_data_uleb128 (AT_loc_list (a)->hash, "%s (%s)", dwarf_attr_name (a->dw_attr), sym); } else dw2_asm_output_delta (DWARF_OFFSET_SIZE, sym, loc_section_label, "%s", dwarf_attr_name (a->dw_attr)); but both size_of_die and value_format handle both the same as loc_list, so for -gdwarf-5 -gsplit-dwarf we just ICE, as e.g. AT_loc_list is not valid on a view list.
Assuming output_view_list_offset is correct, the following patch adjusts size_of_die/value_format accordingly. Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? 2019-03-04 Jakub Jelinek <ja...@redhat.com> PR debug/89498 * dwarf2out.c (size_of_die): For dw_val_class_view_list always use DWARF_OFFSET_SIZE. (value_format): For dw_val_class_view_list never use DW_FORM_loclistx. --- gcc/dwarf2out.c.jj 2019-03-01 09:04:15.440751912 +0100 +++ gcc/dwarf2out.c 2019-03-04 17:58:59.501542373 +0100 @@ -9351,7 +9351,6 @@ size_of_die (dw_die_ref die) } break; case dw_val_class_loc_list: - case dw_val_class_view_list: if (dwarf_split_debug_info && dwarf_version >= 5) { gcc_assert (AT_loc_list (a)->num_assigned); @@ -9360,6 +9359,9 @@ size_of_die (dw_die_ref die) else size += DWARF_OFFSET_SIZE; break; + case dw_val_class_view_list: + size += DWARF_OFFSET_SIZE; + break; case dw_val_class_range_list: if (value_format (a) == DW_FORM_rnglistx) { @@ -9733,12 +9735,12 @@ value_format (dw_attr_node *a) gcc_unreachable (); } case dw_val_class_loc_list: - case dw_val_class_view_list: if (dwarf_split_debug_info && dwarf_version >= 5 && AT_loc_list (a)->num_assigned) return DW_FORM_loclistx; /* FALLTHRU */ + case dw_val_class_view_list: case dw_val_class_range_list: /* For range lists in DWARF 5, use DW_FORM_rnglistx from .debug_info.dwo but in .debug_info use DW_FORM_sec_offset, which is shorter if we Jakub