On Thu, 21 Mar 2019, Jakub Jelinek wrote:

> On Thu, Mar 21, 2019 at 11:13:41AM +0100, Richard Biener wrote:
> > > Would you prefer to have say add_tree_to_fld_list that does what it does 
> > > now
> > > and has just 2 callers in find_decls_types_r and a new
> > > maybe_add_tree_to_fld_list that would do
> > >   if (!fld->pset.add (t))
> > >     add_tree_to_fld_list (t, fld);
> > > and change all the other add_tree_to_fld_list callers?
> > 
> > Not sure if that's needed, if you leave find_decls_types_r alone then
> > always doing the check should work, no?
> 
> Well, find_decls_types_r uses add_tree_to_fld_list, so the if (fld->pset.add
> (t)) return; can't be in that function.  If we want to simplify all the
> other callers, so that they don't need to do it manually, then the only
> options I see is call some other function in those spots that does this
> additional check, or call another function that doesn't do that in the
> two spots of find_decls_types_r, or add another argument to the function
> say with default argument and test that argument before the fld->pset.add.
> E.g. , bool do_add = true and if (do_add && fld->pset.add (t)) return;
> and adjust the two calls in find_decls_types_r to call
> add_tree_to_fld_list (t, fld, false);
> Or keep the patch as is, do the tests before each but the two
> add_tree_to_fld_list calls.

I'd have kept the patch but made the add_tree_to_fld_list following
the new fld->pset.add (t) calls conditional on the result.

Richard.

Reply via email to