From 6ad32e23398f491a79b60003cdb44bd735722675 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Wed, 20 Mar 1996 19:18:39 +0000 Subject: [PATCH] Wed Mar 20 09:37:31 1996 Roland McGrath * acspecific.m4 (AC_C_CONST): Add check for gcc 2.7 bug. From Paul Eggert and Jim Meyering. --- acspecific.m4 | 35 ++++++++++++++++++++++++++++++++++- lib/autoconf/specific.m4 | 35 ++++++++++++++++++++++++++++++++++- 2 files changed, 68 insertions(+), 2 deletions(-) diff --git a/acspecific.m4 b/acspecific.m4 index 6f29ee70..a1107d96 100644 --- a/acspecific.m4 +++ b/acspecific.m4 @@ -1553,7 +1553,40 @@ ccp = (char const *const *) p; } >>, changequote([, ])dnl -ac_cv_c_const=yes, ac_cv_c_const=no)]) +ac_cv_c_const=yes, ac_cv_c_const=no) +dnl +dnl If the above compile succeeds, there may still be a problem. +dnl At least one compiler, gcc-2.7.x, generates bad code for the following +dnl program. If not cross-compiling then compile, link, and run the +dnl following program to detect this. Otherwise, resort to using cpp +dnl to check gcc's preprocessor symbols. +dnl +if test $ac_cv_c_const = yes; then + AC_TRY_RUN(dnl + [dnl + /* Thanks to Paul Eggert for this test. */ + static void set (p) char *p; {*p = 'x';} + int + main () + { + int i; + for (i = 0; i < 1; ++i) + { + char x; + set (&x); + if (*(const char *) &x != 'x') + exit (1); + } + exit (0); + } + ], , ac_cv_c_const=no, + AC_EGREP_CPP(syntax-error, + [#if __GNUC__ == 2 && __GNUC_MINOR__ == 7 + syntax-error +#endif + ], ac_cv_c_const=no)) +fi +]) if test $ac_cv_c_const = no; then AC_DEFINE(const, ) fi diff --git a/lib/autoconf/specific.m4 b/lib/autoconf/specific.m4 index 6f29ee70..a1107d96 100644 --- a/lib/autoconf/specific.m4 +++ b/lib/autoconf/specific.m4 @@ -1553,7 +1553,40 @@ ccp = (char const *const *) p; } >>, changequote([, ])dnl -ac_cv_c_const=yes, ac_cv_c_const=no)]) +ac_cv_c_const=yes, ac_cv_c_const=no) +dnl +dnl If the above compile succeeds, there may still be a problem. +dnl At least one compiler, gcc-2.7.x, generates bad code for the following +dnl program. If not cross-compiling then compile, link, and run the +dnl following program to detect this. Otherwise, resort to using cpp +dnl to check gcc's preprocessor symbols. +dnl +if test $ac_cv_c_const = yes; then + AC_TRY_RUN(dnl + [dnl + /* Thanks to Paul Eggert for this test. */ + static void set (p) char *p; {*p = 'x';} + int + main () + { + int i; + for (i = 0; i < 1; ++i) + { + char x; + set (&x); + if (*(const char *) &x != 'x') + exit (1); + } + exit (0); + } + ], , ac_cv_c_const=no, + AC_EGREP_CPP(syntax-error, + [#if __GNUC__ == 2 && __GNUC_MINOR__ == 7 + syntax-error +#endif + ], ac_cv_c_const=no)) +fi +]) if test $ac_cv_c_const = no; then AC_DEFINE(const, ) fi