[LLVMdev] Call to address 0 gets removed
me22.ca at gmail.com
Tue Jun 9 19:28:37 PDT 2009
2009/6/9 Dale Johannesen <dalej at apple.com>:
>> Although a C translation unit may arguably not assign a
>> defined function as having a pointer value (address) comparing equal
>> ((void *) 0);
> Nothing arguable about it, see C99 126.96.36.199
>> it's not clear that the standard forbids the invocation of such a
> No such function can exist. I don't think the standard forbids you to
> call 0, but it makes calling 0 undefined behavior ("behavior, upon use
> of a nonportable or erroneous program construct or of erroneous
> data"), since there can't possibly be a valid function there.
In C++, my understanding is that the null pointer --
static_cast<void*>(0) -- need not be the pointer whose representation
is all unset bits -- reinterpret_cast<void*>(0) -- and that only
loads/stores/calls/etc on the former are undefined behaviour, as there
may be architectures or programming levels on which referring to
memory address 0 is perfectly reasonable.
Does C99 have such a distinction as well?
More information about the llvm-dev