> Hi.
> 
> There's one another ICE when calling fn_summary->get for a node
> that's not present. Back-trace is:
> 
> (gdb) bt
> #0  inline_to_all_callers (node=<cgraph_node * 0x7ffff698f5a0 "*.LTHUNK0"/2>, 
> data=0x7fffffffd690) at /home/marxin/Programming/gcc/gcc/ipa-inline.c:2260
> #1  0x0000000000b0b2c1 in cgraph_node::call_for_symbol_and_aliases 
> (include_overwritable=<optimized out>, data=<optimized out>, 
> callback=<optimized out>, this=<optimized out>) at 
> /home/marxin/Programming/gcc/gcc/cgraph.h:3221
> #2  cgraph_node::call_for_symbol_and_aliases_1 (this=this@entry=<cgraph_node 
> * const 0x7ffff698f438 "a"/1>, callback=callback@entry=0x1737440 
> <inline_to_all_callers(cgraph_node*, void*)>, data=data@entry=0x7fffffffd690, 
>     include_overwritable=include_overwritable@entry=true) at 
> /home/marxin/Programming/gcc/gcc/cgraph.c:3745
> #3  0x0000000001739422 in cgraph_node::call_for_symbol_and_aliases 
> (include_overwritable=true, data=0x7fffffffd690, callback=0x1737440 
> <inline_to_all_callers(cgraph_node*, void*)>, this=<cgraph_node * const 
> 0x7ffff698f438 "a"/1>)
>     at /home/marxin/Programming/gcc/gcc/cgraph.h:3225
> #4  ipa_inline () at /home/marxin/Programming/gcc/gcc/ipa-inline.c:2581
> 
> with -fdump-ipa-all -fno-inline-small-functions  -O3.
> The problematic symbol is:
> 
> (gdb) p node
> $1 = <cgraph_node * 0x7ffff698f5a0 "*.LTHUNK0"/2>
> (gdb) p node->debug()
> *.LTHUNK0/2 (int B::*.LTHUNK0(int, int)) @0x7ffff698f5a0
>   Type: function definition analyzed alias cpp_implicit_alias
>   Visibility: prevailing_def_ironly artificial
>   References: _ZN1B1aEii/1 (alias)
>   Referring: 
>   Availability: available
>   First run: 0
>   Function flags:
>   Called by: virtual int B::_ZTv0_n24_N1B1aEii(int, int)/3 (can throw 
> external) 
>   Calls: 
> 
> Hope it's fine to use get_create and let the symbol be inlined?
> Patch survives tests on x86_64-linux-gnu.
> 
> Ready for trunk?
> Martin
> 
> gcc/ChangeLog:
> 
> 2018-10-03  Martin Liska  <mli...@suse.cz>
> 
>       PR ipa/87491
>       * ipa-inline.c (inline_to_all_callers_1): Use ::get_create
>       at place where we can have a function that's not
>       in summary.

Creating empty (and thus bogus) summary is not a giid idea. 
We want to print summary of the ultimate alias target of node.

Honza
> ---
>  gcc/ipa-inline.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> 

> diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c
> index 025788522fb..eea2888011c 100644
> --- a/gcc/ipa-inline.c
> +++ b/gcc/ipa-inline.c
> @@ -2222,7 +2222,7 @@ inline_to_all_callers_1 (struct cgraph_node *node, void 
> *data,
>         fprintf (dump_file,
>                  "\nInlining %s size %i.\n",
>                  node->name (),
> -                ipa_fn_summaries->get (node)->size);
> +                ipa_fn_summaries->get_create (node)->size);
>         fprintf (dump_file,
>                  " Called once from %s %i insns.\n",
>                  node->callers->caller->name (),
> 

Reply via email to