[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

alloca.h example in the manual

From: Giorgos Keramidas
Subject: alloca.h example in the manual
Date: Tue, 07 Sep 2010 21:55:32 +0300
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.50 (berkeley-unix)

Hi all,

The Autoconf manual (section 5.5.2, "Particular Function Checks")
recommends the following check for source files that use the alloca()

    #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
    # include <stddef.h>
    # ifdef  __cplusplus
    extern "C"
    # endif
    void *alloca (size_t);

There are systems where this breaks though, because alloca() is
available as a function but not in a special 'alloca.h' header file.
For example, in FreeBSD, alloca() is defined in 'stdlib.h' and this
means that HAVE_ALLOCA_H is undefined.  The result of the previous macro
bits is that a redundant prototype of alloca() is declared.

The modified version shown below declares a prototype of alloca() only
when HAVE_ALLOCA is unset/undefined regardless of what HAVE_ALLOCA_H is
set to:

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

This fixes the alloca() related warnings of at least GNU Emacs on my
FreeBSD installations.  I've submitted the relevant changes to the GNU
Emacs maintainers, but if we can fix the example in the autoconf manual
too it would be really nice.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]