[Bug middle-end/105346] [11/12 Regression] -Wno-free-nonheap-object false positive (on Bison-generated grammar code)

rguenth at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Apr 27 07:15:11 GMT 2022


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105346

--- Comment #13 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Andrew Macleod from comment #11)
> (In reply to Richard Biener from comment #6)
> 
> > 
> >   <bb 2> :
> >   bufp_2 = &buf;
> >   if (&buf != bufp_2)
> >     goto <bb 3>; [INV]
> >   else
> >     goto <bb 4>; [INV]
> > 
> >   <bb 3> :
> >   __builtin_free (bufp_2);
> > 
> > and for the stmt __builtin_free (bufp_2) I'd like to ask if we know
> > that bufp_2 is != &buf (I'd expect a 'true' answer).  I think the
> > relation oracle should be able to answer this but I can't find the
> > appropriate API to use for this?
> 
> - The relation oracle currently only works with ssa-names.
> - Ranger also doesn't currently track that sort of symbolic equivalence with
> irange.
> - the VRP passes have a pointer tracking mechanism as part of the dom walk,
> and the call to rvrp_folder::value_of_expr (bufp_2) would give us &buf.  I
> also think we also would fold the stmt in VRP.  This could in theory be
> extended to any pass doing a dom walk.  however:
> - I believe the upcoming prange extension for pointer ranges in stage 1 will
> make this happen naturally with rangers query system. range_of_stmt ( if
> <..>) would then produce bool [0, 0].  I would also expect that prange will
> have an easy way to ask what its base/equivalence(s) are.

OK, I was hoping I can so sth like

 range_simplify_expr (NE_EXPR, bufp_2, &buf, at_free_stmt);

and then by means of the dominating if condition get a 'true'.  Note the
diagnostic pass is not within a DOM walk so all I can use is an ad-hoc
query.  I'm not looking to simplify the conditional itself as that won't
help me with the current pass structure.


More information about the Gcc-bugs mailing list