[LLVMdev] Reference Manual Clarifications 2
delta17 at cox.net
Sat Apr 19 16:24:32 PDT 2008
Chris Lattner wrote:
> On Apr 19, 2008, at 3:27 PM, Jon Sargeant wrote:
>>>> Regarding malloc and alloca, I realized that the size is unsigned,
>>>> so a
>>>> negative value for NumElements is impossible. I suggest replacing
>>>> is the number of elements allocated" with "it is the UNSIGNED number
>>>> elements allocated".
>>> I'm not sure why this is more clear.
>> The semantics of malloc and alloca depend on whether you interpret
>> NumElements as a signed or unsigned 32-bit integer. For example, if
>> NumElements is 0xffffFFFF, should the instruction fail (because
>> allocating a negative number of elements doesn't make sense), or
>> the instruction allocate 2^32-1 elements? I don't see any mention of
>> whether NumElements is signed or unsigned in the documentation.
> How could an element count be treated as negative? It doesn't make
> sense to allocate negative elements.
True, but making NumElements unsigned just because it can never have a
negative value is not obvious. I always use signed integers for
nonnegative counts for a couple of reasons. First, I can assign -1 to
the count to indicate an invalid or unknown value. Second, if I attempt
to allocate a negative count, I can print an assertion failure and abort
the program. Had I interpreted the count as an unsigned value, the
program would attempt to allocate anywhere from 2 gigabytes to 4
gigabytes. I'm not necessarily saying that NumElements should be
signed, only that the choice between signed and unsigned is not obvious.
More information about the llvm-dev