https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83355

            Bug ID: 83355
           Summary: autofdo g++.dg/bprob/g++-bprob-1.C FAILS with ICE
           Product: gcc
           Version: 8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: gcov-profile
          Assignee: unassigned at gcc dot gnu.org
          Reporter: andi-gcc at firstfloor dot org
                CC: marxin at gcc dot gnu.org
  Target Milestone: ---

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

This patch seems to fix it (but not sure why the abstract origin would point to
itself)

diff --git a/gcc/auto-profile.c b/gcc/auto-profile.c
index 5134a795331..403709bad6b 100644
--- a/gcc/auto-profile.c
+++ b/gcc/auto-profile.c
@@ -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;


Backtrace:


Program received signal SIGSEGV, Segmentation fault.
0x00000000016c4ab2 in pp_emit_prefix (pp=0x229b1a0 <actual_pretty_printer>) at
/home/andi/gcc/git/gcc/gcc/pretty-print.c:1485
1485    {
(gdb) up
#1  0x00000000016c4c90 in pp_append_text(pretty_printer*, char const*, char
const*) ()
    at /home/andi/gcc/git/gcc/gcc/pretty-print.c:1556
1556          pp_emit_prefix (pp);
(gdb) bt
#0  0x00000000016c4ab2 in pp_emit_prefix (pp=0x229b1a0 <actual_pretty_printer>)
at /home/andi/gcc/git/gcc/gcc/pretty-print.c:1485
#1  0x00000000016c4c90 in pp_append_text(pretty_printer*, char const*, char
const*) ()
    at /home/andi/gcc/git/gcc/gcc/pretty-print.c:1556
#2  0x0000000000b12c83 in pp_c_identifier (pp=0x229b1a0
<actual_pretty_printer>, id=<optimized out>)
    at /home/andi/gcc/git/gcc/gcc/c-family/c-pretty-print.c:1203
#3  0x0000000000992b46 in dump_decl (flags=0, t=0x7ffff6d2ce40, pp=0x229b1a0
<actual_pretty_printer>)
    at /home/andi/gcc/git/gcc/gcc/tree.h:3226
#4  dump_function_name(cxx_pretty_printer*, tree_node*, int) () at
/home/andi/gcc/git/gcc/gcc/cp/error.c:1852
#5  0x00000000009940a4 in lang_decl_name(tree_node*, int, bool) () at
/home/andi/gcc/git/gcc/gcc/cp/error.c:3005
#6  0x0000000000994133 in lang_decl_dwarf_name (decl=<optimized out>,
v=<optimized out>, translate=<optimized out>)
    at /home/andi/gcc/git/gcc/gcc/cp/error.c:2977
#7  0x000000000156762a in autofdo::string_table::get_index_by_decl(tree_node*)
const ()
    at /home/andi/gcc/git/gcc/gcc/auto-profile.c:477
....

Reply via email to