Re: [PATCH v2] specify void prototype for functions with no parameters

Paul Eggert <[email protected]> Thu, 1 Sep 2022 18:18:10 -0500
Newsgroups gmane.comp.sysutils.autoconf.patches
Message-ID <[email protected]>
On 9/1/22 11:53, Khem Raj wrote:
>
> I ran into few problems. Some of them were latent issues[1] but some 
> are problems[2] especially  using AC_CHECK_FUNCS when default compiler 
> is C++ compiler not C compiler 


Thanks for checking. How about the attached patch instead? It's closer 
to what you originally suggested.

Zack, any thoughts on this sort of thing?
0001-Port-to-compilers-that-moan-about-K-R-func-decls.patch (text/x-patch, 4.3 KB)
From 7a3bbca81b803ba116b83c82de378e840cc35f81 Mon Sep 17 00:00:00 2001
From: Paul Eggert <[email protected]>
Date: Thu, 1 Sep 2022 16:19:50 -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 '(void)' rather than '()' in function prototypes, as the latter
provokes fatal errors in some compilers nowadays.
* lib/autoconf/functions.m4 (AC_FUNC_STRTOD):
* tests/fortran.at (AC_F77_DUMMY_MAIN usage):
* tests/semantics.at (AC_CHECK_DECLS):
Don’t use () in a function decl.
---
 doc/autoconf.texi         | 7 +++----
 lib/autoconf/c.m4         | 6 +++---
 lib/autoconf/functions.m4 | 3 ---
 tests/fortran.at          | 8 ++++----
 tests/semantics.at        | 2 +-
 5 files changed, 11 insertions(+), 15 deletions(-)

diff --git a/doc/autoconf.texi b/doc/autoconf.texi
index 67f31064..aa534ab7 100644
--- a/doc/autoconf.texi
+++ b/doc/autoconf.texi
@@ -5460,9 +5460,8 @@ the @samp{#undef malloc}):
 #include <config.h>
 #undef malloc
 
-#include <sys/types.h>
-
-void *malloc ();
+#include <stdlib.h>
+#undef malloc
 
 /* Allocate an N-byte block of memory from the heap.
    If N is zero, allocate a 1-byte block.  */
@@ -8297,7 +8296,7 @@ needed:
 #  ifdef __cplusplus
      extern "C"
 #  endif
-   int F77_DUMMY_MAIN () @{ return 1; @}
+   int F77_DUMMY_MAIN (void) @{ return 1; @}
 #endif
 @end example
 
diff --git a/lib/autoconf/c.m4 b/lib/autoconf/c.m4
index abbb83fe..4751c7f5 100644
--- a/lib/autoconf/c.m4
+++ b/lib/autoconf/c.m4
@@ -133,7 +133,7 @@ m4_if([$2], [main], ,
 #ifdef __cplusplus
 extern "C"
 #endif
-char $2 ();])], [return $2 ();])])
+char $2 (void);])], [return $2 ();])])
 
 
 # AC_LANG_FUNC_LINK_TRY(C)(FUNCTION)
@@ -157,7 +157,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 (void); below.  */
 
 #include <limits.h>
 #undef $1
@@ -168,7 +168,7 @@ m4_define([AC_LANG_FUNC_LINK_TRY(C)],
 #ifdef __cplusplus
 extern "C"
 #endif
-char $1 ();
+char $1 (void);
 /* 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.  */
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/fortran.at b/tests/fortran.at
index 75b50b1a..473b39f6 100644
--- a/tests/fortran.at
+++ b/tests/fortran.at
@@ -233,7 +233,7 @@ void FOOBAR_F77 (double *x, double *y);
 #  ifdef __cplusplus
      extern "C"
 #  endif
-   int F77_DUMMY_MAIN () { return 1; }
+   int F77_DUMMY_MAIN (void) { return 1; }
 #endif
 
 int main(int argc, char *argv[])
@@ -315,7 +315,7 @@ void FOOBAR_FC(double *x, double *y);
 #  ifdef __cplusplus
      extern "C"
 #  endif
-   int FC_DUMMY_MAIN () { return 1; }
+   int FC_DUMMY_MAIN (void) { return 1; }
 #endif
 
 int main (int argc, char *argv[])
@@ -561,7 +561,7 @@ void @foobar@ (int *x);
 #  ifdef __cplusplus
      extern "C"
 #  endif
-   int F77_DUMMY_MAIN () { return 1; }
+   int F77_DUMMY_MAIN (void) { return 1; }
 #endif
 
 int main(int argc, char *argv[])
@@ -637,7 +637,7 @@ void @foobar@ (int *x);
 #  ifdef __cplusplus
      extern "C"
 #  endif
-   int FC_DUMMY_MAIN () { return 1; }
+   int FC_DUMMY_MAIN (void) { return 1; }
 #endif
 
 int main(int argc, char *argv[])
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