diff --git a/include/ChangeLog b/include/ChangeLog index 8eb61e64a..21ce68446 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,8 @@ +2001-03-06 Zack Weinberg + + * libiberty.h: Prototype C_alloca; define alloca to either + __builtin_alloca or C_alloca as appropriate. + 2001-03-01 John David Anglin * safe-ctype.h (_sch_test): Cast enum bit to unsigned short int for pcc diff --git a/include/libiberty.h b/include/libiberty.h index 64d072be3..e4fc2af20 100644 --- a/include/libiberty.h +++ b/include/libiberty.h @@ -206,6 +206,20 @@ extern int vasprintf PARAMS ((char **, const char *, va_list)) #define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0])) +/* Drastically simplified alloca configurator. If we're using GCC, + we use __builtin_alloca; otherwise we use the C alloca. The C + alloca is always available. You can override GCC by defining + USE_C_ALLOCA yourself. */ +extern PTR C_alloca PARAMS((size_t)); +#undef alloca +#if GCC_VERSION >= 2000 && !defined USE_C_ALLOCA +# define alloca(x) __builtin_alloca(x) +#else +# define alloca(x) C_alloca(x) +# undef USE_C_ALLOCA +# define USE_C_ALLOCA 1 +#endif + #ifdef __cplusplus } #endif