tags 461100 fixed-upstream
thanks
(changes in upstream 2.77)
Vincent Lefevre wrote:
> Package: manpages-dev
> Version: 2.67-1
> Severity: normal
>
> The alloca(3) man page says:
>
> BUGS
> The alloca() function is machine and compiler dependent.
> On many systems its implementation is buggy. Its use is
> discouraged.
>
> The first sentence doesn't give more information than sections
> "CONFORMING TO" and "NOTES", and concerning the second sentence,
> Torbjorn Granlund says in the MPFR mailing-list[*]:
>
> That text is FUDish; I have never encountered any bugs with alloca on
> any of the many GMP target systems.
>
> So, this misleading paragraph should be removed.
While I don't think we can take one developer's experience as gospel
(though it would be useful to know the range of platforms that Torbjorn has
tested), I do agree that the warning in the existing text is a bit strong.
I removed the sentence containing "buggy", and relocated the rest under NOTES:
NOTES
The alloca() function is machine- and compiler-dependent.
Its use is discouraged.
Perhaps the two of you might still feel that this is a bit strong, but
before I make further changes, I'd be interested in specific details of
platforms that have been found to be problem free.
I also reworked various other parts of the page, so that it now reads as
shown below. The changes will be in upstream 2.77. Thanks for your report!
Cheers,
Michael
NAME
alloca - allocate memory that is automatically freed
SYNOPSIS
#include <alloca.h>
void *alloca(size_t size);
DESCRIPTION
The alloca() function allocates size bytes of space in
the stack frame of the caller. This temporary space is
automatically freed when the function that called
alloca() returns to its caller.
RETURN VALUE
The alloca() function returns a pointer to the beginning
of the allocated space. If the allocation causes stack
overflow, program behavior is undefined.
CONFORMING TO
This function is not in POSIX.1-2001.
There is evidence that the alloca() function appeared in
32V, PWB, PWB.2, 3BSD, and 4BSD. There is a man page for
it in 4.3BSD. Linux uses the GNU version.
NOTES
The alloca() function is machine- and compiler-dependent.
Its use is discouraged.
Because the space allocated by alloca() is allocated
within the stack frame, that space is automatically freed
if the function return is jumped over by a call to
longjmp(3) or siglongjmp(3).
Do not attempt to free(3) space allocated by alloca()!
Notes on the GNU Version
Normally, gcc(1) translates calls to alloca() with
inlined code. This is not done when either the -ansi,
-std=c89, -std=c99, or the -fno-builtin option is given
(and the header <alloca.h> is not included). But beware!
By default the glibc version of <stdlib.h> includes
<alloca.h> and that contains the line:
#define alloca(size) __builtin_alloca (size)
with messy consequences if one has a private version of
this function.
The fact that the code is inlined means that it is impos-
sible to take the address of this function, or to change
its behavior by linking with a different library.
The inlined code often consists of a single instruction
adjusting the stack pointer, and does not check for stack
overflow. Thus, there is no NULL error return.
BUGS
There is no error indication if the stack frame cannot be
extended. (However, after a failed allocation, the pro-
gram is likely to receive a SIGSEGV signal if it attempts
to access the unallocated space.)
On many systems alloca() cannot be used inside the list
of arguments of a function call, because the stack space
reserved by alloca() would appear on the stack in the
middle of the space for the function arguments.
SEE ALSO
brk(2), longjmp(3), malloc(3)
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]