On 22/09/2017 20:27, Hal Finkel wrote:
>
>
> On 09/22/2017 01:09 PM, Kaylor, Andrew wrote:
>> The reason I introduced this patch to begin with is that there are 
>> circumstances under which the optimizer will eliminate loads from addresses 
>> that were generated based on the null pointer arithmetic (because clang 
>> previously emitted a null-based GEP and still will in the Firefox case 
>> because it's using subtraction).  It would seem that the Firefox case won't 
>> ever dereference the pointer it is creating this way, so it should be safe 
>> from the optimization I was seeing.
>>
>> On the other hand, what the warning says is true, right?  I believe clang 
>> will produce an inbounds GEP in the Firefox case and the LLVM language 
>> reference says, "The only in bounds address for a null pointer in the 
>> default address-space is the null pointer itself."  So it's entirely 
>> possible that some optimization will interpret the result of the GEP 
>> generated to represent '(((char*)0)-1)' as a poison value.
>>
>> -Andy
>
> I agree. The warning seems good here. As I recall, doing pointer
> arithmetic on the null pointer is UB (even if we never dereference it).
>
> For convenience, it looks like this:
>
>> pointer arithmetic on a null pointer has undefined behavior if the offset is 
>> nonzero [-Werror,-Wnull-pointer-arithmetic]
>>      return net_FindCharInSet(str, NET_MAX_ADDRESS, set);
>>                                    ^~~~~~~~~~~~~~~
>>  
>> /data/jenkins/workspace/firefox-clang-last/obj-x86_64-pc-linux-gnu/dist/include/nsURLHelper.h:224:36:
>>  note: expanded from macro 'NET_MAX_ADDRESS'
>>  #define NET_MAX_ADDRESS (((char*)0)-1)
>
To be clear, I wasn't arguing!
I was just giving feedback about this new warning.

By the way, maybe we should add that to the release notes?
https://clang.llvm.org/docs/ReleaseNotes.html

Sylvestre

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to