From 5b81543769d4f59f6113bbad004465c6fb30e1f7 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Tue, 30 Aug 2022 16:34:14 -0500 Subject: [PATCH] Port to compilers that moan about K&R func decls MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * lib/autoconf/c.m4 (AC_LANG_CALL, AC_LANG_FUNC_LINK_TRY): Use '(int)' rather than '()' in function prototypes, as the latter provokes fatal errors in some compilers nowadays. * lib/autoconf/functions.m4 (AC_FUNC_STRTOD): * tests/semantics.at (AC_CHECK_DECLS): Don’t use () in a function decl. --- doc/autoconf.texi | 5 ++--- lib/autoconf/c.m4 | 19 +++++-------------- lib/autoconf/functions.m4 | 3 --- tests/semantics.at | 2 +- 4 files changed, 8 insertions(+), 21 deletions(-) diff --git a/doc/autoconf.texi b/doc/autoconf.texi index 67f31064..4f4ec741 100644 --- a/doc/autoconf.texi +++ b/doc/autoconf.texi @@ -5460,9 +5460,8 @@ the @samp{#undef malloc}): #include #undef malloc -#include - -void *malloc (); +#include +#undef malloc /* Allocate an N-byte block of memory from the heap. If N is zero, allocate a 1-byte block. */ diff --git a/lib/autoconf/c.m4 b/lib/autoconf/c.m4 index abbb83fe..ca166557 100644 --- a/lib/autoconf/c.m4 +++ b/lib/autoconf/c.m4 @@ -126,14 +126,8 @@ m4_define([AC_LANG_CALL(C)], m4_if([$2], [main], , [/* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. - The 'extern "C"' is for builds by C++ compilers; - although this is not generally supported in C code, supporting it here - has little cost and some practical benefit (sr 110532). */ -#ifdef __cplusplus -extern "C" -#endif -char $2 ();])], [return $2 ();])]) + builtin and then its argument prototype would still apply. */ +char $2 (int);])], [return $2 (0);])]) # AC_LANG_FUNC_LINK_TRY(C)(FUNCTION) @@ -157,7 +151,7 @@ m4_define([AC_LANG_FUNC_LINK_TRY(C)], #define $1 innocuous_$1 /* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $1 (); below. */ + which can conflict with char $1 (int); below. */ #include #undef $1 @@ -165,17 +159,14 @@ m4_define([AC_LANG_FUNC_LINK_TRY(C)], /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $1 (); +char $1 (int); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$1 || defined __stub___$1 choke me #endif -], [return $1 ();])]) +], [return $1 (0);])]) # AC_LANG_BOOL_COMPILE_TRY(C)(PROLOGUE, EXPRESSION) diff --git a/lib/autoconf/functions.m4 b/lib/autoconf/functions.m4 index 9f44a1ce..ee519a38 100644 --- a/lib/autoconf/functions.m4 +++ b/lib/autoconf/functions.m4 @@ -1613,9 +1613,6 @@ AC_DEFUN([AC_FUNC_STRTOD], AC_CACHE_CHECK(for working strtod, ac_cv_func_strtod, [AC_RUN_IFELSE([AC_LANG_SOURCE([[ ]AC_INCLUDES_DEFAULT[ -#ifndef strtod -double strtod (); -#endif int main (void) { diff --git a/tests/semantics.at b/tests/semantics.at index d24c4551..276d9744 100644 --- a/tests/semantics.at +++ b/tests/semantics.at @@ -207,7 +207,7 @@ AT_CHECK_MACRO([AC_CHECK_DECLS], [[extern int yes; enum { myenum }; extern struct mystruct_s { int x[20]; } mystruct; - extern int myfunc(); + extern int myfunc (int); #define mymacro1(arg) arg #define mymacro2]]) # Ensure we can detect missing declarations of functions whose -- 2.37.2