On Wed, Jan 15, 2020 at 1:37 PM Jan Hubicka <hubi...@ucw.cz> wrote:
>
> > gcc/ChangeLog:
> >
> > 2020-01-15  Martin Liska  <mli...@suse.cz>
> >
> >       * ipa-profile.c (ipa_profile_read_edge_summary): Do not allow
> >       2 calls of streamer_read_hwi in a function call.
>
> Good catch, Martin!
> > ---
> >  gcc/ipa-profile.c | 5 +++--
> >  1 file changed, 3 insertions(+), 2 deletions(-)
> >
> > diff --git a/gcc/ipa-profile.c b/gcc/ipa-profile.c
> > index fc231c916b7..03272f20987 100644
> > --- a/gcc/ipa-profile.c
> > +++ b/gcc/ipa-profile.c
> > @@ -451,8 +451,9 @@ ipa_profile_read_edge_summary (class lto_input_block 
> > *ib, cgraph_edge *edge)
> >
> >    for (i = 0; i < len; i++)
> >    {
> > -    speculative_call_target item (streamer_read_hwi (ib),
> > -     streamer_read_hwi (ib));
> > +    unsigned int target_id = streamer_read_hwi (ib);
> > +    int target_probability = streamer_read_hwi (ib);
> > +    speculative_call_target item (target_id, target_probability);
>
> David, this may be interesting case for analyzer/warning. This surfaced
> in LTO stremaing for second time quite recently and leads to hard to
> find bugs.
>
> While day before yesterday in pub I argued that warning for nested
> function calls is not a good way since it would warn too often, perhaps
> we want to have some way to annotate streamer functions to make it clear
> that we do not want them to appear inside function call parameters where
> evaluation order is undefined.

Maybe one can always warn if you call the same function twice (and the
function appears to have side-effects)?  Might fire too often for tree checking
functions tho.

Richard.

> Honza
> >      csum->speculative_call_targets.safe_push (item);
> >    }
> >  }
> > --
> > 2.24.1
> >
>

Reply via email to