|
| 1 | +/* Memory allocation on the stack. |
| 2 | + Copyright (C) 1995, 1999, 2001-2007 Free Software Foundation, Inc. |
| 3 | +
|
| 4 | + This program is free software; you can redistribute it and/or modify it |
| 5 | + under the terms of the GNU General Public License as published |
| 6 | + by the Free Software Foundation; either version 2, or (at your option) |
| 7 | + any later version. |
| 8 | +
|
| 9 | + This program is distributed in the hope that it will be useful, |
| 10 | + but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 11 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 12 | + General Public License for more details. |
| 13 | +
|
| 14 | + You should have received a copy of the GNU General Public |
| 15 | + License along with this program; if not, write to the Free Software |
| 16 | + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, |
| 17 | + USA. */ |
| 18 | + |
| 19 | +/* When this file is included, it may be preceded only by preprocessor |
| 20 | + declarations. Thanks to AIX. Therefore we include it right after |
| 21 | + "config.h", not later. */ |
| 22 | + |
| 23 | +/* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H |
| 24 | + means there is a real alloca function. */ |
| 25 | +#ifndef _GL_ALLOCA_H |
| 26 | +#define _GL_ALLOCA_H |
| 27 | + |
| 28 | +/* alloca(N) returns a pointer (void* or char*) to N bytes of memory |
| 29 | + allocated on the stack, and which will last until the function returns. |
| 30 | + Use of alloca should be avoided: |
| 31 | + - inside arguments of function calls - undefined behaviour, |
| 32 | + - in inline functions - the allocation may actually last until the |
| 33 | + calling function returns, |
| 34 | + - for huge N (say, N >= 65536) - you never know how large (or small) |
| 35 | + the stack is, and when the stack cannot fulfill the memory allocation |
| 36 | + request, the program just crashes. |
| 37 | + */ |
| 38 | + |
| 39 | +#ifndef alloca |
| 40 | +# ifdef __GNUC__ |
| 41 | +# define alloca __builtin_alloca |
| 42 | +# else |
| 43 | +# ifdef _MSC_VER |
| 44 | +# include <malloc.h> |
| 45 | +# define alloca _alloca |
| 46 | +# else |
| 47 | +# if HAVE_ALLOCA_H |
| 48 | +# include <alloca.h> |
| 49 | +# else |
| 50 | +# ifdef _AIX |
| 51 | + #pragma alloca |
| 52 | +# else |
| 53 | +# ifdef __hpux /* This section must match that of bison generated files. */ |
| 54 | +# ifdef __cplusplus |
| 55 | +extern "C" void *alloca (unsigned int); |
| 56 | +# else /* not __cplusplus */ |
| 57 | +extern void *alloca (); |
| 58 | +# endif /* not __cplusplus */ |
| 59 | +# else /* not __hpux */ |
| 60 | +# ifndef alloca |
| 61 | +extern char *alloca (); |
| 62 | +# endif |
| 63 | +# endif /* __hpux */ |
| 64 | +# endif |
| 65 | +# endif |
| 66 | +# endif |
| 67 | +# endif |
| 68 | +#endif |
| 69 | + |
| 70 | +#endif /* _GL_ALLOCA_H */ |
0 commit comments