On 11 January 2018 at 10:34, Prathamesh Kulkarni
<prathamesh.kulka...@linaro.org> 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 ?
But I suppose this constraint will make malloc propagation almost useless :(
>
> Thanks,
> Prathamesh
>> Jeff