vararrays.m4 2.31 KB
Newer Older
Paul Eggert's avatar
Paul Eggert committed
1 2 3 4 5 6
# Check for variable-length arrays.

# serial 5

# From Paul Eggert

Paul Eggert's avatar
Paul Eggert committed
7
# Copyright (C) 2001, 2009-2020 Free Software Foundation, Inc.
Paul Eggert's avatar
Paul Eggert committed
8 9 10 11 12 13 14 15 16 17 18 19 20
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This is a copy of AC_C_VARARRAYS from a recent development version
# of Autoconf.  It replaces Autoconf's version, or for pre-2.61 autoconf
# it defines the macro that Autoconf lacks.
AC_DEFUN([AC_C_VARARRAYS],
[
  AC_CACHE_CHECK([for variable-length arrays],
    ac_cv_c_vararrays,
    [AC_EGREP_CPP([defined],
       [#ifdef __STDC_NO_VLA__
Paul Eggert's avatar
Paul Eggert committed
21 22
        defined
        #endif
Paul Eggert's avatar
Paul Eggert committed
23 24 25
       ],
       [ac_cv_c_vararrays='no: __STDC_NO_VLA__ is defined'],
       [AC_COMPILE_IFELSE(
Paul Eggert's avatar
Paul Eggert committed
26 27 28 29 30 31 32 33 34 35 36 37
          [AC_LANG_PROGRAM(
             [[/* Test for VLA support.  This test is partly inspired
                  from examples in the C standard.  Use at least two VLA
                  functions to detect the GCC 3.4.3 bug described in:
                  https://lists.gnu.org/r/bug-gnulib/2014-08/msg00014.html
                  */
               #ifdef __STDC_NO_VLA__
                syntax error;
               #else
                 extern int n;
                 int B[100];
                 int fvla (int m, int C[m][m]);
Paul Eggert's avatar
Paul Eggert committed
38

Paul Eggert's avatar
Paul Eggert committed
39 40 41 42 43
                 int
                 simple (int count, int all[static count])
                 {
                   return all[count - 1];
                 }
Paul Eggert's avatar
Paul Eggert committed
44

Paul Eggert's avatar
Paul Eggert committed
45 46 47 48 49 50 51 52 53 54 55 56 57 58
                 int
                 fvla (int m, int C[m][m])
                 {
                   typedef int VLA[m][m];
                   VLA x;
                   int D[m];
                   static int (*q)[m] = &B;
                   int (*s)[n] = q;
                   return C && &x[0][0] == &D[0] && &D[0] == s[0];
                 }
               #endif
               ]])],
          [ac_cv_c_vararrays=yes],
          [ac_cv_c_vararrays=no])])])
Paul Eggert's avatar
Paul Eggert committed
59 60 61 62 63 64 65 66 67 68
  if test "$ac_cv_c_vararrays" = yes; then
    dnl This is for compatibility with Autoconf 2.61-2.69.
    AC_DEFINE([HAVE_C_VARARRAYS], 1,
      [Define to 1 if C supports variable-length arrays.])
  elif test "$ac_cv_c_vararrays" = no; then
    AC_DEFINE([__STDC_NO_VLA__], 1,
      [Define to 1 if C does not support variable-length arrays, and
       if the compiler does not already define this.])
  fi
])