On Fri, 12 Jan 2018, Prathamesh Kulkarni wrote:

> On 12 January 2018 at 05:02, Jeff Law <l...@redhat.com> wrote:
> > On 01/10/2018 10:04 PM, Prathamesh Kulkarni wrote:
> >> On 11 January 2018 at 04:50, Jeff Law <l...@redhat.com> wrote:
> >>> On 01/09/2018 05:57 AM, Prathamesh Kulkarni wrote:
> >>>>
> >>>> As Jakub pointed out for the case:
> >>>> void *f()
> >>>> {
> >>>>   return __builtin_malloc (0);
> >>>> }
> >>>>
> >>>> The malloc propagation would set f() to malloc.
> >>>> However AFAIU, malloc(0) returns NULL (?) and the function shouldn't
> >>>> be marked as malloc ?
> >>> This seems like a pretty significant concern.   Given:
> >>>
> >>>
> >>>  return  n ? 0 : __builtin_malloc (n);
> >>>
> >>> Is the function malloc-like enough to allow it to be marked?
> >>>
> >>> If not, then ISTM we have to be very conservative in what we mark.
> >>>
> >>> foo (n, m)
> >>> {
> >>>   return n ? 0 : __builtin_malloc (m);
> >>> }
> >>>
> >>> Is that malloc-like enough to mark?
> >> Not sure. Should I make it more conservative by marking it as malloc
> >> only if the argument to __builtin_malloc
> >> is constant or it's value-range is known not to include 0? And
> >> similarly for __builtin_calloc ?
> > It looks like the consensus is we don't need to worry about the cases
> > above.  So unless Jakub chimes in with a solid reason, don't worry about
> > them.
> Thanks everyone for the clarification. The attached patch skips on 0 phi arg,
> and returns false if -fno-delete-null-pointer-checks is passed.
> 
> With the patch, malloc_candidate_p returns true for
> return 0;
> or
> ret = phi<0, 0>
> return ret
> 
> which I believe is OK as far as correctness is concerned.
> However as Martin points out suggesting malloc attribute for return 0
> case is not ideal.
> I suppose we can track the return 0 (or when value range of return
> value is known not to include 0)
> corner case and avoid suggesting malloc for those ?
> 
> Validation in progress.
> Is this patch OK for next stage-1 ?

Ok.

Thanks,
Richard.

Reply via email to