Commit ad3f54ab by Andi Kleen Committed by Andi Kleen

Fix stack overflow with autofdo (PR83355)

g++.dg/bprob* is failing currently with autofdo.

Running in gdb shows that there is a very deep recursion in get_index_by_decl until it
overflows the stack.

gcc/:
2017-12-11  Andi Kleen  <ak@linux.intel.com>

	PR gcov-profile/83355
	* auto-profile.c (string_table::get_index_by_decl): Don't
	recurse when abstract origin points to itself.

From-SVN: r255540
parent 46bb9d29
2017-12-11 Andi Kleen <ak@linux.intel.com>
PR gcov-profile/83355
* auto-profile.c (string_table::get_index_by_decl): Don't
recurse when abstract origin points to itself.
2017-12-11 Bin Cheng <bin.cheng@arm.com>
PR tree-optimization/83320
......@@ -477,7 +477,7 @@ string_table::get_index_by_decl (tree decl) const
ret = get_index (lang_hooks.dwarf_name (decl, 0));
if (ret != -1)
return ret;
if (DECL_ABSTRACT_ORIGIN (decl))
if (DECL_ABSTRACT_ORIGIN (decl) && DECL_ABSTRACT_ORIGIN (decl) != decl)
return get_index_by_decl (DECL_ABSTRACT_ORIGIN (decl));
return -1;
......
......@@ -360,6 +360,8 @@ lto_input_tree_ref (struct lto_input_block *ib, struct data_in *data_in,
case LTO_label_decl_ref:
case LTO_translation_unit_decl_ref:
case LTO_namelist_decl_ref:
if (!data_in->file_data->current_decl_state)
printf("tag %d\n", tag);
ix_u = streamer_read_uhwi (ib);
result = lto_file_decl_data_get_var_decl (data_in->file_data, ix_u);
break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment