configure: check if compiler halts on function prototype mismatch
authorYang Tse <yangsita@gmail.com>
Sun, 16 Dec 2012 17:50:58 +0000 (18:50 +0100)
committerYang Tse <yangsita@gmail.com>
Sun, 16 Dec 2012 17:50:58 +0000 (18:50 +0100)
configure.ac
m4/cares-compilers.m4

index f220b43..be7346c 100644 (file)
@@ -177,6 +177,7 @@ fi
 
 CARES_CHECK_COMPILER_HALT_ON_ERROR
 CARES_CHECK_COMPILER_ARRAY_SIZE_NEGATIVE
+CARES_CHECK_COMPILER_PROTOTYPE_MISMATCH
 CARES_CHECK_COMPILER_SYMBOL_HIDING
 
 CARES_CHECK_NO_UNDEFINED
index 8120aab..a716fed 100644 (file)
@@ -15,7 +15,7 @@
 #***************************************************************************
 
 # File version for 'aclocal' use. Keep it a single number.
-# serial 72
+# serial 73
 
 
 dnl CARES_CHECK_COMPILER
@@ -1527,6 +1527,42 @@ AC_DEFUN([CARES_CHECK_COMPILER_SYMBOL_HIDING], [
 ])
 
 
+dnl CARES_CHECK_COMPILER_PROTOTYPE_MISMATCH
+dnl -------------------------------------------------
+dnl Verifies if the compiler actually halts after the
+dnl compilation phase without generating any object
+dnl code file, when the source code tries to redefine
+dnl a prototype which does not match previous one.
+
+AC_DEFUN([CARES_CHECK_COMPILER_PROTOTYPE_MISMATCH], [
+  AC_REQUIRE([CARES_CHECK_COMPILER_HALT_ON_ERROR])dnl
+  AC_MSG_CHECKING([if compiler halts on function prototype mismatch])
+  AC_COMPILE_IFELSE([
+    AC_LANG_PROGRAM([[
+#     include <stdlib.h>
+      int rand(int n);
+      int rand(int n)
+      {
+        if(n)
+          return ++n;
+        else
+          return n;
+      }
+    ]],[[
+      int i[2];
+      int j = rand(i[0]);
+      if(j)
+        return j;
+    ]])
+  ],[
+    AC_MSG_RESULT([no])
+    AC_MSG_ERROR([compiler does not halt on function prototype mismatch.])
+  ],[
+    AC_MSG_RESULT([yes])
+  ])
+])
+
+
 dnl CARES_VAR_MATCH (VARNAME, VALUE)
 dnl -------------------------------------------------
 dnl Verifies if shell variable VARNAME contains VALUE.