This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: alloca (0) in include/libiberty.h
On 6/10/19 5:54 AM, Andrew Haley wrote:
> On 6/10/19 8:24 AM, Martin Liška wrote:
>
>> I've just noticed that we have couple of alloca (0) in libiberty:
>>
>> #ifndef REGEX_MALLOC
>> # ifdef C_ALLOCA
>> alloca (0);
>> # endif
>> #endif
>>
>> If I'm correct the value 0 has a special meaning that tells a C library
>> to clean up all previous alloca allocations.
>>
>> man alloca does not document the behavior
>
> I'm sure it doesn't. This alloca(0) behaviour is a libiberty-internal
> thing.
It's not really libiberty-internal, the C-alloca implementation on top
of malloc was commonly copied into various free software packages in the
90s.
In that implementation alloca(0) had special meaning -- it asked for a
cleanup which was useful in certain circumstances when the C
implementation couldn't detect you'd previously left a scope and thus
wasn't aware it could clean up stuff. We used to have alloca(0)
sprinkled all over the GCC sources to deal with these issues.
>
>> Question is how legacy is alloca call from a standard library?
>
> alloca(3) is implemented by GCC as a builtin. It's fast, simple, and
> widely used. These days you might use variable-length arrays instead,
> which are at least portable.
>
> Is there some problem that you want to solve?
Certainly the GCC builtin is better as are VLAs compared to the old C
implementation on top of malloc.
jeff