(root)/
gettext-0.22.4/
gettext-tools/
gnulib-lib/
alloca.in.h
       1  /* Memory allocation on the stack.
       2     Copyright (C) 1995, 1999, 2001-2020 Free Software Foundation, Inc.
       3  
       4     This program is free software: you can redistribute it and/or modify
       5     it under the terms of the GNU General Public License as published by
       6     the Free Software Foundation; either version 3 of the License, or
       7     (at your option) 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
      12     GNU General Public License for more details.
      13  
      14     You should have received a copy of the GNU General Public License
      15     along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
      16  
      17  /* When this file is included, it may be preceded only by preprocessor
      18     declarations.  Thanks to AIX.  Therefore we include it right after
      19     "config.h", not later.  */
      20  
      21  /* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H
      22     means there is a real alloca function.  */
      23  #ifndef _GL_ALLOCA_H
      24  #define _GL_ALLOCA_H
      25  
      26  /* alloca(N) returns a pointer (void* or char*) to N bytes of memory
      27     allocated on the stack, and which will last until the function returns.
      28     Use of alloca should be avoided:
      29       - inside arguments of function calls - undefined behaviour,
      30       - in inline functions - the allocation may actually last until the
      31         calling function returns,
      32       - for huge N (say, N >= 65536) - you never know how large (or small)
      33         the stack is, and when the stack cannot fulfill the memory allocation
      34         request, the program just crashes.
      35   */
      36  
      37  #ifndef alloca
      38    /* Some version of mingw have an <alloca.h> that causes trouble when
      39       included after 'alloca' gets defined as a macro.  As a workaround,
      40       include this <alloca.h> first and define 'alloca' as a macro afterwards
      41       if needed.  */
      42  # if defined __GNUC__ && (defined _WIN32 && ! defined __CYGWIN__) && @HAVE_ALLOCA_H@
      43  #  include_next <alloca.h>
      44  # endif
      45  #endif
      46  #ifndef alloca
      47  # ifdef __GNUC__
      48  #  define alloca __builtin_alloca
      49  # else
      50  #  if defined _AIX
      51   #pragma alloca
      52      /* Alternatively: #define alloca __alloca, works as well.  */
      53  #  elif defined _MSC_VER
      54  #   include <malloc.h>
      55  #   define alloca _alloca
      56  #  elif defined __DECC && defined __VMS
      57  #   define alloca __ALLOCA
      58  #  elif defined __TANDEM && defined _TNS_E_TARGET
      59  #   ifdef  __cplusplus
      60  extern "C"
      61  #   endif
      62  void *_alloca (unsigned short);
      63  #   pragma intrinsic (_alloca)
      64  #   define alloca _alloca
      65  #  elif defined __MVS__
      66  #   include <stdlib.h>
      67  #  else
      68  #   ifdef __hpux /* This section must match that of bison generated files. */
      69  #    ifdef __cplusplus
      70  extern "C" void *alloca (unsigned int);
      71  #    else /* not __cplusplus */
      72  extern void *alloca ();
      73  #    endif /* not __cplusplus */
      74  #   else /* not __hpux */
      75  #    ifndef alloca
      76  extern char *alloca ();
      77  #    endif
      78  #   endif /* __hpux */
      79  #  endif
      80  # endif
      81  #endif
      82  
      83  #endif /* _GL_ALLOCA_H */