summaryrefslogtreecommitdiff
path: root/m4/restrict.m4
blob: 902dc1308b9ccd7cfb3ea042ff2c162d69ee6ec3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#serial 1000
dnl based on acx_restrict.m4, from the GNU Autoconf Macro Archive at:
dnl http://www.gnu.org/software/ac-archive/htmldoc/acx_restrict.html

# Determine whether the C compiler supports the "restrict" keyword introduced
# in ANSI C99, or an equivalent.  Do nothing if the compiler accepts it.
# Otherwise, if the compiler supports an equivalent (like gcc's __restrict__)
# define "restrict" to be that.  Otherwise, define "restrict" to be empty.

AC_DEFUN([ACX_C_RESTRICT],
[AC_CACHE_CHECK([for C restrict keyword], acx_cv_c_restrict,
  [acx_cv_c_restrict=no
   # Try the official restrict keyword, then gcc's __restrict__, then
   # SGI's __restrict.  __restrict has slightly different semantics than
   # restrict (it's a bit stronger, in that __restrict pointers can't
   # overlap even with non __restrict pointers), but I think it should be
   # okay under the circumstances where restrict is normally used.
   for acx_kw in restrict __restrict__ __restrict; do
     AC_COMPILE_IFELSE([AC_LANG_SOURCE(
      [#ifndef __cplusplus
      float * $acx_kw x;
#endif
      ])], [acx_cv_c_restrict=$acx_kw; break])
   done
  ])
 case $acx_cv_c_restrict in
   restrict) ;;
   no) AC_DEFINE(restrict,,
	[Define to equivalent of C99 restrict keyword, or to nothing if this
	is not supported.  Do not define if restrict is supported directly.]) ;;
   *)  AC_DEFINE_UNQUOTED(restrict, $acx_cv_c_restrict) ;;
 esac
])