Chunks of glibc headers have no place in documenting an interface, and (__builtin_)alloca() is an intrinsic, not code; those days are, thankfully, long gone Also, clarify standards behaviour (and remove the (outdated!) list of cc(1) switches) regarding when alloca() is allowed to not be ODR-usable Signed-off-by: Ahelenia Ziemiańska <nabijaczleweli@xxxxxxxxxxxxxxxxxx> --- man3/alloca.3 | 52 +++++++++++++++------------------------------------ 1 file changed, 15 insertions(+), 37 deletions(-) diff --git a/man3/alloca.3 b/man3/alloca.3 index 20761b079..936a15954 100644 --- a/man3/alloca.3 +++ b/man3/alloca.3 @@ -122,46 +122,24 @@ Do not attempt to .BR free (3) space allocated by .BR alloca ()! -.SS Notes on the GNU version -Normally, -.BR gcc (1) -translates calls to +.PP +By necessity, .BR alloca () -with inlined code. -This is not done when either the -.IR "\-ansi" , -.IR "\-std=c89" , -.IR "\-std=c99" , -or the -.IR "\-std=c11" -option is given -.BR and -the header -.I <alloca.h> -is not included. -Otherwise, (without an \-ansi or \-std=c* option) the glibc version of -.I <stdlib.h> -includes +is a compiler built-in, also known as +.BR __builtin_alloca (). +By default, modern compilers automatically translate all uses of +.BR alloca () +into the built-in, but this is forbidden if standards conformance is requested +.RI ( "\-ansi" , +.IR "\-std=c*" ), +in which case .I <alloca.h> -and that contains the lines: -.PP -.in +4n -.EX -#ifdef __GNUC__ -#define alloca(size) __builtin_alloca (size) -#endif -.EE -.in +is required, lest a symbol dependency be emitted. .PP -with messy consequences if one has a private version of this function. -.PP -The fact that the code is inlined means that it is impossible -to take the address of this function, or to change its behavior -by linking with a different library. -.PP -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. +The fact that +.BR alloca () +is a built-in means it is impossible to take its address +or to change its behavior by linking with a different library. .SH BUGS Due to the nature of the stack, it is impossible to check if the allocation would overflow the space available, and, hence, neither is indicating an error. -- 2.20.1
Attachment:
signature.asc
Description: PGP signature