[Bug debug/94273] [10 Regression] ICE in splice_child_die, at dwarf2out.c:5657 since r10-7235-g52b3aa8be1893848
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Mar 27 08:37:15 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94273
--- Comment #9 from Richard Biener <rguenth at gcc dot gnu.org> ---
OK, so during early creation of the DIE for the type we end up in
static void
gen_struct_or_union_type_die (tree type, dw_die_ref context_die,
enum debug_info_usage usage)
{
...
int complete = (TYPE_SIZE (type)
&& (! TYPE_STUB_DECL (type)
|| ! TYPE_DECL_SUPPRESS_DEBUG (TYPE_STUB_DECL (type))));
where complete is false because of TYPE_DECL_SUPPRESS_DEBUG. When record
the type to be re-processed later and between now and then the C++ FE does
note_debug_info_needed via maybe_emit_vtables and clears
TYPE_DECL_SUPPRESS_DEBUG, causing the type to be completed during
retry_incomplete_types processing.
I think PR93951 may be related in the end because the conditions on when
exactly we emit what parts of debug info is quite intricate in dwarf2out.
Now, for this bug I guess we should choose to piggy-back on that,
making should_emit_struct_debug return false for DINFO_LEVEL_TERSE
or initializing debug_struct_{generic,ordinary} accordingly.
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index b1fa6f5ff7c..378a27394e8 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -399,6 +399,9 @@ get_full_len (const wide_int &op)
static bool
should_emit_struct_debug (tree type, enum debug_info_usage usage)
{
+ if (debug_info_level <= DINFO_LEVEL_TERSE)
+ return false;
+
enum debug_struct_file criterion;
tree type_decl;
bool generic = lang_hooks.types.generic_p (type);
thoughts?
The DWARF we generate for the testcase at -g1 is then
<0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
<c> DW_AT_producer : (indirect string, offset: 0x0): GNU C++14 10.0.1
2
0200325 (experimental) -mtune=generic -march=x86-64 -g1
<10> DW_AT_language : 4 (C++)
<11> DW_AT_name : (indirect string, offset: 0x4a): t.ii
<15> DW_AT_comp_dir : (indirect string, offset: 0x4f):
/home/rguenther/
obj/gcc
<19> DW_AT_ranges : 0x0
<1d> DW_AT_low_pc : 0x0
<25> DW_AT_stmt_list : 0x0
<1><29>: Abbrev Number: 2 (DW_TAG_variable)
<2a> DW_AT_name : b
<2c> DW_AT_decl_file : 1
<2d> DW_AT_decl_line : 3
<2e> DW_AT_decl_column : 12
<2f> DW_AT_external : 1
<2f> DW_AT_declaration : 1
<1><2f>: Abbrev Number: 3 (DW_TAG_variable)
<30> DW_AT_specification: <0x29>
<34> DW_AT_decl_line : 4
<35> DW_AT_decl_column : 5
<36> DW_AT_location : 9 byte block: 3 0 0 0 0 0 0 0 0 (DW_OP_addr: 0)
<1><40>: Abbrev Number: 4 (DW_TAG_subprogram)
<41> DW_AT_external : 1
<41> DW_AT_name : c
<43> DW_AT_decl_file : 1
<44> DW_AT_decl_line : 2
<45> DW_AT_decl_column : 16
<46> DW_AT_linkage_name: (indirect string, offset: 0x67): _ZN1a1cEv
<4a> DW_AT_virtuality : 1 (virtual)
<4b> DW_AT_vtable_elem_location: 2 byte block: 10 0 (DW_OP_constu:
0)
<4e> DW_AT_accessibility: 3 (private)
<4f> DW_AT_low_pc : 0x0
<57> DW_AT_high_pc : 0xb
<5f> DW_AT_frame_base : 1 byte block: 9c (DW_OP_call_frame_cfa)
<61> DW_AT_GNU_all_call_sites: 1
<1><61>: Abbrev Number: 0
More information about the Gcc-bugs
mailing list