Ping
2015-06-18 12:54 GMT+03:00 Ilya Enkovich <enkovich....@gmail.com>: > Hi, > > In early_inliner we do recompute inline summaries for edges after > optimize_inline_calls, but check this summary exists in case new edges > appear. But then it calls inline_update_overall_summary which also going > through edges inline summaries but with no check this time causing segfault. > This patch fixes it. Bootstrapped and regtested for > x86_64-unknown-linux-gnu. Is it OK for trunk and gcc-5-branch? > > Thanks, > Ilya > -- > gcc/ > > 2015-06-18 Ilya Enkovich <enkovich....@gmail.com> > > PR ipa/66566 > * ipa-inline-analysis.c (estimate_calls_size_and_time): Check > edge summary is available. > > gcc/testsuite/ > > 2015-06-18 Ilya Enkovich <enkovich....@gmail.com> > > PR ipa/66566 > * gcc.target/i386/mpx/pr66566.c: New test. > > > diff --git a/gcc/ipa-inline-analysis.c b/gcc/ipa-inline-analysis.c > index bbde855..e910ac5 100644 > --- a/gcc/ipa-inline-analysis.c > +++ b/gcc/ipa-inline-analysis.c > @@ -3122,6 +3122,9 @@ estimate_calls_size_and_time (struct cgraph_node *node, > int *size, > struct cgraph_edge *e; > for (e = node->callees; e; e = e->next_callee) > { > + if (inline_edge_summary_vec.length () <= (unsigned) e->uid) > + continue; > + > struct inline_edge_summary *es = inline_edge_summary (e); > > /* Do not care about zero sized builtins. */ > @@ -3153,6 +3156,9 @@ estimate_calls_size_and_time (struct cgraph_node *node, > int *size, > } > for (e = node->indirect_calls; e; e = e->next_callee) > { > + if (inline_edge_summary_vec.length () <= (unsigned) e->uid) > + continue; > + > struct inline_edge_summary *es = inline_edge_summary (e); > if (!es->predicate > || evaluate_predicate (es->predicate, possible_truths)) > diff --git a/gcc/testsuite/gcc.target/i386/mpx/pr66566.c > b/gcc/testsuite/gcc.target/i386/mpx/pr66566.c > new file mode 100644 > index 0000000..a405c20 > --- /dev/null > +++ b/gcc/testsuite/gcc.target/i386/mpx/pr66566.c > @@ -0,0 +1,12 @@ > +/* { dg-do compile } */ > +/* { dg-options "-O2 -fcheck-pointer-bounds -mmpx" } */ > + > +union jsval_layout > +{ > + void *asPtr; > +}; > +union jsval_layout a; > +union jsval_layout b; > +union jsval_layout __inline__ fn1() { return b; } > + > +void fn2() { a = fn1(); }