This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 1/2] Update iterator of next


On Fri, Nov 15, 2019 at 10:16 AM Richard Biener
<richard.guenther@gmail.com> wrote:
>
> On Fri, Nov 15, 2019 at 9:10 AM Jan Hubicka <hubicka@ucw.cz> wrote:
> >
> > > next is initialized only in the loop before, it is never updated
> > > in it's own loop.
> > >
> > > gcc/ChangeLog
> > >
> > >       2019-11-15  Xiong Hu Luo  <luoxhu@linux.ibm.com>
> > >
> > >       * ipa-inline.c (inline_small_functions): Update iterator of next.
> >
> > OK,
> > thanks!
>
> This breaks bootstrap and the loop before is similarly odd.
>
> (gdb) p edge
> $1 = (cgraph_edge *) 0xa5a5a5a5a5a5a5a5
>
> so apparently edge->next_callee is GCed (thus 'edge' itself is freed?)

edge->resolve_speculation ();

can remove the edge, so maybe

Index: gcc/ipa-inline.c
===================================================================
--- gcc/ipa-inline.c    (revision 278280)
+++ gcc/ipa-inline.c    (working copy)
@@ -1932,13 +1932,13 @@ inline_small_functions (void)
       if (has_speculative)
        for (edge = node->callees; edge; edge = next)
          {
+           next = edge->next_callee;
            if (edge->speculative
                && !speculation_useful_p (edge, edge->aux != NULL))
              {
                edge->resolve_speculation ();
                update = true;
              }
-           next = edge->next_callee;
          }
       if (update)
        {

which I'll commit after verifying it fixes bootstrap.

But the whole function needs audit for this 'next' thing (as said, the
previous loop
never loops either).

Richard.

> Richard.
>
> > Honza
> > > ---
> > >  gcc/ipa-inline.c | 15 +++++++++------
> > >  1 file changed, 9 insertions(+), 6 deletions(-)
> > >
> > > diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c
> > > index 78ec0ec685f..96aefaf514b 100644
> > > --- a/gcc/ipa-inline.c
> > > +++ b/gcc/ipa-inline.c
> > > @@ -1945,12 +1945,15 @@ inline_small_functions (void)
> > >       }
> > >        if (has_speculative)
> > >       for (edge = node->callees; edge; edge = next)
> > > -       if (edge->speculative && !speculation_useful_p (edge,
> > > -                                                       edge->aux != NULL))
> > > -         {
> > > -           edge->resolve_speculation ();
> > > -           update = true;
> > > -         }
> > > +       {
> > > +         if (edge->speculative
> > > +             && !speculation_useful_p (edge, edge->aux != NULL))
> > > +           {
> > > +             edge->resolve_speculation ();
> > > +             update = true;
> > > +           }
> > > +         next = edge->next_callee;
> > > +       }
> > >        if (update)
> > >       {
> > >         struct cgraph_node *where = node->inlined_to
> > > --
> > > 2.21.0.777.g83232e3864
> > >


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]