[Bug bootstrap/79255] [7 Regression] PGO bootstrap fails on x86_64/ppc64le building Ada
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Jan 30 09:35:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79255
--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
In a debugging session I also see
#1 0x0000000000e79f4c in check_die (
die=<dw_die_ref 0x7ffff49f54b0 DW_TAG_subprogram <parent=0x7ffff49f5230
DW_TAG_subprogram>>) at ../../trunk/gcc/dwarf2out.c:6157
6157 gcc_assert (a->dw_attr != DW_AT_low_pc
(gdb) l
6152 instance tree [that has DW_AT_inline] should not contain any
6153 attributes which describe aspects of the subroutine which vary
6154 between distinct inlined expansions or distinct out-of-line
6155 expansions. */
6156 FOR_EACH_VEC_SAFE_ELT (die->die_attr, ix, a)
6157 gcc_assert (a->dw_attr != DW_AT_low_pc
6158 && a->dw_attr != DW_AT_high_pc
6159 && a->dw_attr != DW_AT_location
6160 && a->dw_attr != DW_AT_frame_base
6161 && a->dw_attr != DW_AT_call_all_calls
(gdb) p a->dw_attr
$1 = DW_AT_low_pc
(gdb) p debug_dwarf_die (die)
DIE 0: DW_TAG_subprogram (0x7ffff49f54b0)
abbrev id: 0 offset: 0 mark: 0
DW_AT_name: "exp_ch5__expand_assign_with_target_names__replace_target_name"
DW_AT_artificial: 1
DW_AT_inline: 2
DW_AT_low_pc: label: *.LFB18
DW_AT_high_pc: label: *.LFE18
DW_AT_frame_base: location descriptor:
(0x7ffff375d1e0) DW_OP_call_frame_cfa 0, 0
DW_AT_static_link: location descriptor:
(0x7ffff375d230) DW_OP_breg17 0, 0
(0x7ffff375d280) DW_OP_plus_uconst 8, 0
(0x7ffff375d2d0) DW_OP_deref 8, 0
DW_AT_GNU_all_call_sites: 1
DIE 0: DW_TAG_formal_parameter (0x7ffff49f56e0)
abbrev id: 0 offset: 0 mark: 0
DW_AT_name: "node"
DW_AT_decl_file: "../../trunk/gcc/ada/atree.ads" (0)
DW_AT_decl_line: 609
DW_AT_type: die -> 0 (0x7ffff49d5960)
DW_AT_location: location list -> label:*.LLST57
DIE 0: DW_TAG_subprogram (0x7ffff49f5730)
abbrev id: 0 offset: 0 mark: 0
DW_AT_name:
"exp_ch5__expand_assign_with_target_names__replace_target_name__traverse"
DW_AT_type: die -> 0 (0x7ffff4b60690)
DW_AT_artificial: 1
DIE 0: DW_TAG_formal_parameter (0x7ffff49f5820)
abbrev id: 0 offset: 0 mark: 0
DW_AT_name: "node"
DW_AT_decl_file: "../../trunk/gcc/ada/atree.ads" (0)
DW_AT_decl_line: 583
DW_AT_type: die -> 0 (0x7ffff49d5960)
DIE 0: DW_TAG_subprogram (0x7ffff49f5870)
abbrev id: 0 offset: 0 mark: 0
DW_AT_name:
"exp_ch5__expand_assign_with_target_names__replace_target_name__traverse__traverse_field"
DW_AT_decl_file: "../../trunk/gcc/ada/atree.adb" (2)
DW_AT_decl_line: 2470
DW_AT_type: die -> 0 (0x7ffff4b60690)
DIE 0: DW_TAG_formal_parameter (0x7ffff49f5af0)
abbrev id: 0 offset: 0 mark: 0
DW_AT_name: "nod"
DW_AT_decl_file: "../../trunk/gcc/ada/atree.adb" (2)
DW_AT_decl_line: 2458
DW_AT_type: die -> 0 (0x7ffff49d5960)
DIE 0: DW_TAG_formal_parameter (0x7ffff49f5b40)
abbrev id: 0 offset: 0 mark: 0
DW_AT_name: "fld"
DW_AT_decl_file: "../../trunk/gcc/ada/atree.adb" (2)
DW_AT_decl_line: 2459
DW_AT_type: die -> 0 (0x7ffff49f5960)
DIE 0: DW_TAG_formal_parameter (0x7ffff49f5b90)
abbrev id: 0 offset: 0 mark: 0
DW_AT_name: "fn"
DW_AT_decl_file: "../../trunk/gcc/ada/atree.adb" (2)
DW_AT_decl_line: 2460
DW_AT_type: die -> 0 (0x7ffff49f5a00)
DIE 0: DW_TAG_lexical_block (0x7ffff49f5be0)
...
and the high/low PC attributes are added when the DIE is already abstract
and inline via
#0 add_AT_low_high_pc (
die=<dw_die_ref 0x7ffff49f54b0 DW_TAG_subprogram <parent=0x7ffff49f5230
DW_TAG_subprogram>>, lbl_low=0x3840f80 "*.LFB18", lbl_high=0x3c0fe60 "*.LFE18",
force_direct=false) at ../../trunk/gcc/dwarf2out.c:4210
#1 0x0000000000ea11f0 in gen_subprogram_die (decl=
<function_decl 0x7ffff4df7500
exp_ch5__expand_assign_with_target_names__replace_target_name>,
context_die=<dw_die_ref 0x0>)
at ../../trunk/gcc/dwarf2out.c:22177
#2 0x0000000000eaa0d4 in gen_decl_die (
decl=<function_decl 0x7ffff4df7500
exp_ch5__expand_assign_with_target_names__replace_target_name>, origin=<tree
0x0>, ctx=0x0,
context_die=<dw_die_ref 0x0>) at ../../trunk/gcc/dwarf2out.c:25187
#3 0x0000000000eab500 in dwarf2out_decl (
decl=<function_decl 0x7ffff4df7500
exp_ch5__expand_assign_with_target_names__replace_target_name>) at
../../trunk/gcc/dwarf2out.c:25694
#4 0x0000000000eab54a in dwarf2out_function_decl (
decl=<function_decl 0x7ffff4df7500
exp_ch5__expand_assign_with_target_names__replace_target_name>) at
../../trunk/gcc/dwarf2out.c:25709
#5 0x0000000000f37ee2 in rest_of_handle_final ()
at ../../trunk/gcc/final.c:4506
which hints at that something goes wrong with setting the abtract / inline
flags. They are added when the above DIE is generated as nested function
DIE while processing the outer function scopes:
#0 add_AT_flag (
die=<dw_die_ref 0x7ffff49f54b0 DW_TAG_subprogram <parent=0x7ffff49f5230
DW_TAG_subprogram>>, attr_kind=DW_AT_artificial, flag=1)
at ../../trunk/gcc/dwarf2out.c:4075
#1 0x0000000000ea08b8 in gen_subprogram_die (
decl=<function_decl 0x7ffff4df7500
exp_ch5__expand_assign_with_target_names__replace_target_name>,
context_die=<dw_die_ref 0x7ffff49f5230 DW_TAG_subprogram
<parent=0x7ffff68c9000 DW_TAG_compile_unit>>) at
../../trunk/gcc/dwarf2out.c:21969
#2 0x0000000000eaa0d4 in gen_decl_die (
decl=<function_decl 0x7ffff4df7500
exp_ch5__expand_assign_with_target_names__replace_target_name>, origin=<tree
0x0>, ctx=0x0,
context_die=<dw_die_ref 0x7ffff49f5230 DW_TAG_subprogram
<parent=0x7ffff68c9000 DW_TAG_compile_unit>>) at
../../trunk/gcc/dwarf2out.c:25187
#3 0x0000000000ea89ff in process_scope_var (stmt=<block 0x7ffff4ddc900>,
decl=<function_decl 0x7ffff4df7500
exp_ch5__expand_assign_with_target_names__replace_target_name>, origin=<tree
0x0>,
context_die=<dw_die_ref 0x7ffff49f5230 DW_TAG_subprogram
<parent=0x7ffff68c9000 DW_TAG_compile_unit>>) at
../../trunk/gcc/dwarf2out.c:24736
#4 0x0000000000ea8a78 in decls_for_scope (stmt=<block 0x7ffff4ddc900>,
context_die=<dw_die_ref 0x7ffff49f5230 DW_TAG_subprogram
<parent=0x7ffff68c9000 DW_TAG_compile_unit>>) at
../../trunk/gcc/dwarf2out.c:24761
#5 0x0000000000ea1a00 in gen_subprogram_die (
decl=<function_decl 0x7ffff6263100
exp_ch5__expand_assign_with_target_names>, context_die=<dw_die_ref
0x7ffff68c9000 DW_TAG_compile_unit>)
at ../../trunk/gcc/dwarf2out.c:22370
#6 0x0000000000eaa0d4 in gen_decl_die (
decl=<function_decl 0x7ffff6263100
exp_ch5__expand_assign_with_target_names>, origin=<tree 0x0>, ctx=0x0,
context_die=<dw_die_ref 0x7ffff68c9000 DW_TAG_compile_unit>)
at ../../trunk/gcc/dwarf2out.c:25187
#7 0x0000000000eab500 in dwarf2out_decl (
decl=<function_decl 0x7ffff6263100
exp_ch5__expand_assign_with_target_names>) at ../../trunk/gcc/dwarf2out.c:25694
#8 0x0000000000eaa849 in dwarf2out_early_global_decl (
decl=<function_decl 0x7ffff4df7400
exp_ch5__expand_assign_with_target_names__replace_target>) at
../../trunk/gcc/dwarf2out.c:25348
#9 0x0000000000e14e9f in symbol_table::finalize_compilation_unit (
this=0x7ffff68a6100) at ../../trunk/gcc/cgraphunit.c:2611
and the decl has DECL_ARTIFICIAL set and is auto-inline.
The DW_AT_inline is only set when we later process a function finally that
has this function inlined:
#0 add_AT_unsigned (
die=<dw_die_ref 0x7ffff49f54b0 DW_TAG_subprogram <parent=0x7ffff49f5230
DW_TAG_subprogram>>, attr_kind=DW_AT_inline, unsigned_val=2)
at ../../trunk/gcc/dwarf2out.c:4119
#1 0x0000000000ea0c07 in gen_subprogram_die (
decl=<function_decl 0x7ffff4df7500
exp_ch5__expand_assign_with_target_names__replace_target_name>,
context_die=<dw_die_ref 0x0>)
at ../../trunk/gcc/dwarf2out.c:22037
#2 0x0000000000eaa0d4 in gen_decl_die (
decl=<function_decl 0x7ffff4df7500
exp_ch5__expand_assign_with_target_names__replace_target_name>, origin=<tree
0x0>, ctx=0x0,
context_die=<dw_die_ref 0x0>) at ../../trunk/gcc/dwarf2out.c:25187
#3 0x0000000000eab500 in dwarf2out_decl (
decl=<function_decl 0x7ffff4df7500
exp_ch5__expand_assign_with_target_names__replace_target_name>) at
../../trunk/gcc/dwarf2out.c:25694
#4 0x0000000000e9fc6b in dwarf2out_abstract_function (
decl=<function_decl 0x7ffff4df7500
exp_ch5__expand_assign_with_target_names__replace_target_name>) at
../../trunk/gcc/dwarf2out.c:21587
#5 0x0000000000ea9ee2 in gen_decl_die (decl=<tree 0x0>,
origin=<function_decl 0x7ffff4df7500
exp_ch5__expand_assign_with_target_names__replace_target_name>, ctx=0x0,
context_die=<dw_die_ref 0x7ffff36a1050 DW_TAG_lexical_block
<parent=0x7ffff369df50 DW_TAG_inlined_subroutine>>) at
../../trunk/gcc/dwarf2out.c:25144
#6 0x0000000000ea89ff in process_scope_var (stmt=<block 0x7ffff4ac8b40>,
decl=<tree 0x0>,
origin=<function_decl 0x7ffff4df7500
exp_ch5__expand_assign_with_target_names__replace_target_name>,
context_die=<dw_die_ref 0x7ffff36a1050 DW_TAG_lexical_block
<parent=0x7ffff369df50 DW_TAG_inlined_subroutine>>) at
../../trunk/gcc/dwarf2out.c:24736
#7 0x0000000000ea8b2a in decls_for_scope (stmt=<block 0x7ffff4ac8b40>,
context_die=<dw_die_ref 0x7ffff36a1050 DW_TAG_lexical_block
<parent=0x7ffff369df50 DW_TAG_inlined_subroutine>>) at
../../trunk/gcc/dwarf2out.c:24768
#8 0x0000000000ea3fe8 in gen_lexical_block_die (stmt=<block 0x7ffff4ac8b40>,
context_die=<dw_die_ref 0x7ffff369df50 DW_TAG_inlined_subroutine
<parent=0x7ffff49f3000 DW_TAG_subprogram>>) at
../../trunk/gcc/dwarf2out.c:23123
#9 0x0000000000ea870e in gen_block_die (stmt=<block 0x7ffff4ac8b40>,
context_die=<dw_die_ref 0x7ffff369df50 DW_TAG_inlined_subroutine
<parent=0x7ffff49f3000 DW_TAG_subprogram>>) at
../../trunk/gcc/dwarf2out.c:24698
#10 0x0000000000ea8ba7 in decls_for_scope (stmt=<block 0x7ffff4ac8ae0>,
context_die=<dw_die_ref 0x7ffff369df50 DW_TAG_inlined_subroutine
<parent=0x7ffff49f3000 DW_TAG_subprogram>>) at
../../trunk/gcc/dwarf2out.c:24779
#11 0x0000000000ea4187 in gen_inlined_subroutine_die (
stmt=<block 0x7ffff4ac8ae0>,
context_die=<dw_die_ref 0x7ffff49f3000 DW_TAG_subprogram
<parent=0x7ffff68c9000 DW_TAG_compile_unit>>) at
../../trunk/gcc/dwarf2out.c:23161
#12 0x0000000000ea86f9 in gen_block_die (stmt=<block 0x7ffff4ac8ae0>,
context_die=<dw_die_ref 0x7ffff49f3000 DW_TAG_subprogram
<parent=0x7ffff68c9000 DW_TAG_compile_unit>>) at
../../trunk/gcc/dwarf2out.c:24695
#13 0x0000000000ea8ba7 in decls_for_scope (stmt=<block 0x7ffff4ddcf00>,
context_die=<dw_die_ref 0x7ffff49f3000 DW_TAG_subprogram
<parent=0x7ffff68c9000 DW_TAG_compile_unit>>) at
../../trunk/gcc/dwarf2out.c:24779
#14 0x0000000000ea8723 in gen_block_die (stmt=<block 0x7ffff4ddcf00>,
context_die=<dw_die_ref 0x7ffff49f3000 DW_TAG_subprogram
<parent=0x7ffff68c9000 DW_TAG_compile_unit>>) at
../../trunk/gcc/dwarf2out.c:24701
#15 0x0000000000ea8ba7 in decls_for_scope (stmt=<block 0x7ffff4ddce40>,
context_die=<dw_die_ref 0x7ffff49f3000 DW_TAG_subprogram
<parent=0x7ffff68c9000 DW_TAG_compile_unit>>) at
../../trunk/gcc/dwarf2out.c:24779
#16 0x0000000000ea1a00 in gen_subprogram_die (
decl=<function_decl 0x7ffff625c500 exp_ch5__expand_n_assignment_statement>,
context_die=<dw_die_ref 0x7ffff68c9000 DW_TAG_compile_unit>)
at ../../trunk/gcc/dwarf2out.c:22370
#17 0x0000000000eaa0d4 in gen_decl_die (
decl=<function_decl 0x7ffff625c500 exp_ch5__expand_n_assignment_statement>,
origin=<tree 0x0>, ctx=0x0,
context_die=<dw_die_ref 0x7ffff68c9000 DW_TAG_compile_unit>)
at ../../trunk/gcc/dwarf2out.c:25187
#18 0x0000000000eab500 in dwarf2out_decl (
decl=<function_decl 0x7ffff625c500 exp_ch5__expand_n_assignment_statement>)
at ../../trunk/gcc/dwarf2out.c:25694
#19 0x0000000000eab54a in dwarf2out_function_decl (
decl=<function_decl 0x7ffff625c500 exp_ch5__expand_n_assignment_statement>)
at ../../trunk/gcc/dwarf2out.c:25709
#20 0x0000000000f37ee2 in rest_of_handle_final ()
at ../../trunk/gcc/final.c:4506
that's obviously too late, but it seems that dwarf2out_abstract_function
doesn't do its work (it fails to generate a new abstract instance here
but that should have happened during inlining itself anyway...). So
somehow the twisted maze of conditions when and when not to generate a new
DIE or re-use the existing DIE in get_subprogram_die fails... (the out-of-line
copy of the inline is not yet finalized here).
More information about the Gcc-bugs
mailing list