[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