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

--- Comment #11 from Andrew Macleod <amacleod at redhat dot com> ---
(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.

Reply via email to