Subject: bug#6170: 24.0.50; Compiling on solaris2.10 with gcc doesn't define alloca

From: Dan Nicolaescu <[email-masked]>
Date: Wed, 12 May 2010 14:29:40 -0400

Lawrence Mitchell <[email-masked]> writes:

> On this system, <stdlib.h> is provided by Sun and therefore
> doesn't define alloca, unlike on a typical GNU/linux system where
> <stdlib.h> contains the following:
>
> | #if defined __USE_GNU || defined __USE_BSD || defined __USE_MISC
> | # include <alloca.h>
> | #endif /* Use GNU, BSD, or misc.  */
>
> When compiling emacs with gcc, alloca is therefore undefined.
> The culprit is this snippet in configure.in:
>
> | #ifndef __GNUC__
> | # ifdef HAVE_ALLOCA_H
> | #  include <alloca.h>
> | # else /* AIX files deal with #pragma.  */
> | #  ifndef alloca /* predefined by HP cc +Olibcalls */
> | char *alloca ();
> | #  endif
> | # endif /* HAVE_ALLOCA_H */
> | #endif /* __GNUC__ */
>

"info autoconf" says that this is the proper way to do it:

          #ifdef HAVE_ALLOCA_H
          # include <alloca.h>
          #elif defined __GNUC__
          # define alloca __builtin_alloca
          #elif defined _AIX
          # define alloca __alloca
          #elif defined _MSC_VER
          # include <malloc.h>
          # define alloca _alloca
          #else
          # include <stddef.h>
          # ifdef  __cplusplus
          extern "C"
          # endif
          void *alloca (size_t);
          #endif

Not sure we need the last #else part, or the _MSC_VER part...