On Tue, 26 Jan 2021, Jakub Jelinek wrote:

> On Tue, Jan 26, 2021 at 10:55:35AM +0100, Jan Hubicka wrote:
> > > On Tue, Jan 26, 2021 at 10:03:16AM +0100, Richard Biener wrote:
> > > > > In 4.8 and earlier we used to fold the following to 0 during GENERIC 
> > > > > folding,
> > > > > but we don't do that anymore because ctor_for_folding etc. has been 
> > > > > turned into a
> > > > > GIMPLE centric API, but as the testcase shows, it is invoked even 
> > > > > during
> > > > > GENERIC folding and there the automatic vars still should have 
> > > > > meaningful
> > > > > initializers.  I've verified that the C++ FE drops TREE_READONLY on
> > > > > automatic vars with const qualified types if they require non-constant
> > > > > (runtime) initialization.
> > > 
> > > > > --- gcc/varpool.c.jj  2021-01-26 08:57:36.184290279 +0100
> > > > > +++ gcc/varpool.c     2021-01-26 09:46:16.453619140 +0100
> > > > > @@ -412,6 +412,12 @@ ctor_for_folding (tree decl)
> > > > >    if (!TREE_STATIC (decl) && !DECL_EXTERNAL (decl))
> > > > >      {
> > > > >        gcc_assert (!TREE_PUBLIC (decl));
> > > > > +      /* Unless this is called during FE folding.  */
> > > > > +      if (!in_gimple_form
> > > > 
> > > > Wouldn't it be better to use symtab->state == PARSING?  Why isn't
> > > 
> > > That would work for me too, in_gimple_form is just what is normally used
> > > for the folding.  And the routine is doing folding, but sits in a file 
> > > where
> > > symtab->state == PARSING check is more natural.
> > 
> > I think it is property of function to be in generic form.  We allow
> > functions to be constructed late and we could allow doing that using
> > generic (even though as far as I know we generate them all as gimple -
> > profiling code, collected ctors, offlining etc).
> > 
> > So perhaps we don't need to tie that with symtab state.
> 
> So do you want
> (cfun && (cfun->curr_properties & PROP_trees))
> instead then?

Well, then in_gimple_form is OK as well (but note in_gimple_form
is only set from the pass manger but not unset so it could leak
== true and most definitely a 'false' is not safe either).  So
yeah, the cfun based check looks safer here.

> I'd really prefer such a check at least for GCC11 because while for most
> automatic vars DECL_INITIAL will be cleared during gimplification, I don't
> see guarantees for that and guarantees that it isn't left to be random
> garbage after that.
> 
>       Jakub
> 
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg,
Germany; GF: Felix Imendörffer; HRB 36809 (AG Nuernberg)

Reply via email to