[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: AC_C_RESTRICT
From: |
Ralf Wildenhues |
Subject: |
Re: AC_C_RESTRICT |
Date: |
Mon, 3 Apr 2006 18:55:30 +0200 |
User-agent: |
Mutt/1.5.11 |
Hi Albert,
* Albert Chin wrote on Fri, Mar 31, 2006 at 10:40:14PM CEST:
> On Fri, Mar 31, 2006 at 02:25:51PM -0600, Albert Chin wrote:
> > Autoconf 2.59 chooses __restrict on HP-UX 11.x.
> typedef int * int_ptr;
>
> void
> foo (int_ptr __restrict rp) {
> int i;
> }
> $ cc -c a.c
> cc: "a.c", line 4: error 1671: Illegal use of restrict.
>
> If I replace the parameter list with "int *" rather than "int_ptr",
> then it works. Compiler bug?
I think so. Probably a good idea to check this in _AC_PROG_CC_C99 as
well. While at it, let's remove the `unused variable' warnings so this
works with -Werror.
AC_C_RESTRICT also suffers from the cleanup buglet mentioned a couple of
days ago, as well as AC_C_INLINE. I noticed furthermore that neither of
these macros is tested by the testsuite.
OK to apply this patch to address all of this?
Cheers,
Ralf
* lib/autoconf/c.m4 (AC_C_INLINE): Do not skip cleanup code.
(AC_C_RESTRICT): Likewise. Furthermore, add a function with a
typedef'ed restricted pointer, to catch a compiler bug on
HP-UX 11.x, and fix warnings so it passes with -Werror.
(_AC_PROG_CC_C99): Likewise.
Reported by Albert Chin <address@hidden>.
* tests/mktests.sh: Do not skip AC_C_INLINE, AC_C_RESTRICT.
Index: lib/autoconf/c.m4
===================================================================
RCS file: /cvsroot/autoconf/autoconf/lib/autoconf/c.m4,v
retrieving revision 1.217
diff -u -r1.217 c.m4
--- lib/autoconf/c.m4 3 Apr 2006 03:18:39 -0000 1.217
+++ lib/autoconf/c.m4 3 Apr 2006 16:51:26 -0000
@@ -1092,8 +1092,10 @@
double average;
};
+typedef const char *ccp;
+
static inline int
-test_restrict(const char *restrict text)
+test_restrict(ccp restrict text)
{
// See if C++-style comments work.
// Iterate through items via the restricted pointer.
@@ -1169,6 +1171,9 @@
int dynamic_array[ni.number];
dynamic_array[43] = 543;
+
+ // work around unused variable warnings
+ return bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x';
]],
dnl Try
dnl GCC -std=gnu99 (unused restrictive modes: -std=c99
-std=iso9899:1999)
@@ -1397,7 +1381,8 @@
$ac_kw foo_t foo () {return 0; }
#endif
])],
- [ac_cv_c_inline=$ac_kw; break])
+ [ac_cv_c_inline=$ac_kw])
+ test "$ac_cv_c_inline" != no && break
done
])
AH_VERBATIM([inline],
@@ -1505,9 +1490,17 @@
# Try the official restrict keyword, then gcc's __restrict, and
# the less common variants.
for ac_kw in restrict __restrict __restrict__ _Restrict; do
- AC_COMPILE_IFELSE([AC_LANG_SOURCE(
- [float * $ac_kw x;])],
- [ac_cv_c_restrict=$ac_kw; break])
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
+ [[typedef int * int_ptr;
+ int foo (int_ptr $ac_kw ip) {
+ return ip[0];
+ }]],
+ [[int s[1];
+ int * $ac_kw t = s;
+ t[0] = 0;
+ return foo(t)]])],
+ [ac_cv_c_restrict=$ac_kw])
+ test "$ac_cv_c_restrict" != no && break
done
])
case $ac_cv_c_restrict in
Index: tests/mktests.sh
===================================================================
RCS file: /cvsroot/autoconf/autoconf/tests/mktests.sh,v
retrieving revision 1.45
diff -u -r1.45 mktests.sh
--- tests/mktests.sh 1 Apr 2006 15:57:02 -0000 1.45
+++ tests/mktests.sh 3 Apr 2006 16:40:05 -0000
@@ -121,7 +121,7 @@
# - AC_FD_CC
# Is a number.
#
-# - AC_PROG_CC, AC_C_(CONST|INLINE|VOLATILE), AC_PATH_XTRA
+# - AC_PROG_CC, AC_C_(CONST|VOLATILE), AC_PATH_XTRA
# Checked in semantics.
#
# - AC_CYGWIN, AC_CYGWIN32, AC_EMXOS2, AC_MING32, AC_EXEEXT, AC_OBJEXT
@@ -155,7 +155,7 @@
^AC_SEARCH_LIBS$
^(AC_TRY.*|AC_RUN_LOG)$
^AC_.*_IFELSE$
-^(AC_(PROG_CC|C_CONST|C_INLINE|C_RESTRICT|C_VOLATILE))$
+^(AC_(PROG_CC|C_CONST|C_VOLATILE))$
^AC_(CYGWIN|CYGWIN32|EMXOS2|MING32|EXEEXT|OBJEXT)$
^AC_PATH_XTRA$
^AC_SYS_RESTARTABLE_SYSCALLS$
- Re: AC_C_RESTRICT,
Ralf Wildenhues <=