/* Memory allocation on the stack.
- Copyright (C) 1995, 1999, 2001-2003 Free Software Foundation, Inc.
+
+ Copyright (C) 1995, 1999, 2001, 2002, 2003, 2004, 2006 Free Software
+ Foundation, Inc.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published
You should have received a copy of the GNU General Public
License along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
USA. */
-/* When this file is included, it may be preceded only by preprocessor
- declarations. Thanks to AIX. Therefore we include it right after
- "config.h", not later. */
-
-#ifndef _ALLOCA_H
-#define _ALLOCA_H
+/* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H
+ means there is a real alloca function. */
+#ifndef _GNULIB_ALLOCA_H
+# define _GNULIB_ALLOCA_H
-/* alloca(N) returns a pointer (void* or char*) to N bytes of memory
- allocated on the stack, and which will last until the function returns.
+/* alloca (N) returns a pointer to N bytes of memory
+ allocated on the stack, which will last until the function returns.
Use of alloca should be avoided:
- inside arguments of function calls - undefined behaviour,
- in inline functions - the allocation may actually last until the
request, the program just crashes.
*/
-#ifdef __GNUC__
-# ifndef alloca
+#ifndef alloca
+# ifdef __GNUC__
# define alloca __builtin_alloca
-# endif
-#else
-# ifdef _MSC_VER
+# elif defined _AIX
+# define alloca __alloca
+# elif defined _MSC_VER
# include <malloc.h>
# define alloca _alloca
# else
-# if HAVE_ALLOCA_H
-# include <alloca.h>
-# else
-# ifdef _AIX
- #pragma alloca
-# else
-# ifdef __hpux /* This section must match that of bison generated files. */
-# ifdef __cplusplus
-extern "C" void *alloca (unsigned int);
-# else /* not __cplusplus */
-extern void *alloca ();
-# endif /* not __cplusplus */
-# else /* not __hpux */
-# ifndef alloca
-extern char *alloca ();
-# endif
-# endif /* __hpux */
-# endif
+# include <stddef.h>
+# ifdef __cplusplus
+extern "C"
# endif
+void *alloca (size_t);
# endif
#endif
-#endif /* _ALLOCA_H */
+#endif /* _GNULIB_ALLOCA_H */