[llvm-dev] Which assumptions do llvm.memcpy/memmove/memset.* make when the count is 0?

John Regehr via llvm-dev llvm-dev at lists.llvm.org
Thu Jul 20 21:06:08 PDT 2017


Also note that whereas GCC exploits the tricky definition of memcpy(), 
LLVM at present doesn't appear to:

   https://godbolt.org/g/8uxvBQ

In fact LLVM doesn't even assume the pointer is non-null in a case where 
I'd argue that it should:

   https://godbolt.org/g/svHQKL

John


On 07/20/2017 10:00 PM, John Regehr via llvm-dev wrote:
>> So, the pointer arguments of memcpy *shall* (a violation of a shall 
>> clause is UB, per ยง4/2) have valid values, even though the function 
>> will copy zero characters.
> 
> This is true in C but the question was about LLVM intrinsics.
> 
> Since the LangRef does not mention any such restriction, I would assume 
> that memcpy(0,0,0) is not UB in LLVM.  If it is UB then we must update 
> the LangRef to be clear on this point (actually we should update the 
> LangRef either way since this is a question that'll come up again).
> 
> John
> 
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev


More information about the llvm-dev mailing list