On Thu, May 17, 2018 at 1:25 PM Prathamesh Kulkarni <
prathamesh.kulka...@linaro.org> wrote:

> On 15 May 2018 at 12:20, Richard Biener <rguent...@suse.de> wrote:
> > On Tue, 15 May 2018, Prathamesh Kulkarni wrote:
> >
> >> On 12 January 2018 at 18:26, Richard Biener <rguent...@suse.de> wrote:
> >> > 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.
> >> I have committed this as r260250 after bootstrap+test on x86_64 on top
of trunk.
> >> With the patch, we now emit a suggestion for malloc attribute for a
> >> function returning NULL,
> >> which may not be ideal. I was wondering for which cases should we
> >> avoid suggesting malloc attribute with -Wsuggest-attribute ?
> >>
> >> 1] Return value is NULL.
> >
> > Yes.
> >
> >> 2] Return value is phi result, and all args of phi are 0.
> >
> > In which case constant propagation should have eliminated the PHI.
> >
> >> 3] Any other cases ?
> >
> > Can't think of any.  Please create testcases for all cases you
> > fend off.
> Hi,
> Does the attached patch look OK ?
> It simply checks in warn_function_malloc if function returns NULL and
> chooses not to warn in that case.

I think a better approach is to not add the pointless attribute.

Richard.

> Thanks,
> Prathamesh
> >
> > Richard.

Reply via email to