[llvm-dev] Potential issue with noalias @malloc and @realloc
Flamedoge via llvm-dev
llvm-dev at lists.llvm.org
Tue Apr 11 17:15:03 PDT 2017
Sorry, forgot to source where I quoted:
http://en.cppreference.com/w/c/memory/free p.5
Kevin
On Tue, Apr 11, 2017 at 5:12 PM, Jonathan Roelofs <jonathan at codesourcery.com
> wrote:
>
>
> On 4/11/17 6:09 PM, Flamedoge via llvm-dev wrote:
>
>> I don't know when this was added on cppreference but
>>
>> The behavior is undefined if after |free()| returns, an access is made
>>>
>> through the pointer |ptr| (unless another allocation function happened
>> to result in a pointer value equal to |ptr|)
>>
>> This seems to suggest that there is no UB... However, I couldn't find
>> the corresponding line or relevant part on latest C
>> std, http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf
>>
>
> C99 says that p0 has indeterminate value after the free.
>
>
> Jon
>
>
>> Regards,
>> Kevin
>>
>> On Tue, Apr 11, 2017 at 4:27 PM, Sanjoy Das
>> <sanjoy at playingwithpointers.com <mailto:sanjoy at playingwithpointers.com>>
>> wrote:
>>
>> Hi Kevin,
>>
>> On April 11, 2017 at 4:14:14 PM, Flamedoge (code.kchoi at gmail.com
>> <mailto:code.kchoi at gmail.com>) wrote:
>> > So only "non-freed" malloc pointers are No-Alias which makes it
>> > flow-sensitive. There is no reason why malloc couldn't return
>> previously
>> > freed location.
>>
>> Yes.
>>
>> Talking to Nick Lewycky on IRC, I figured out a shorter way of saying
>> what I wanted to say. We know that programs like this are UB in C:
>>
>> p0 = malloc();
>> free(p0);
>> p1 = malloc();
>> if (p0 == p1) {
>> int v = *p0; // Semantically free'ed but bitwise equal to an
>> allocated value
>> }
>>
>> and we relied on them having UB when marking malloc's return value
>> as noalias.
>>
>> However, we can end up in cases like the above by applying
>> loop-unswitch + GVN to well defined C programs.
>>
>> -- Sanjoy
>>
>>
>>
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>
>>
> --
> Jon Roelofs
> jonathan at codesourcery.com
> CodeSourcery / Mentor Embedded / Siemens
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170411/3a0ee0a7/attachment.html>
More information about the llvm-dev
mailing list