summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2017-02-06 14:24:00 +0100
committerVictor Stinner <victor.stinner@gmail.com>2017-02-06 14:24:00 +0100
commitb9bcd948d6c64f86e0999e14542be258b0732792 (patch)
tree7a48cb166d390309d1aa41abe7a089f03c89df05
parent1b154e367502946cae598b9872f2f03dc64aa089 (diff)
downloadcpython-b9bcd948d6c64f86e0999e14542be258b0732792.tar.gz
Prohibit implicit C function declarations
Issue #27659: use -Werror=implicit-function-declaration when possible (GCC and Clang, but it depends on the compiler version). Patch written by Chi Hsuan Yen.
-rw-r--r--Misc/NEWS4
-rwxr-xr-xconfigure41
-rw-r--r--configure.ac20
3 files changed, 65 insertions, 0 deletions
diff --git a/Misc/NEWS b/Misc/NEWS
index 922f4664a9..c6402534ee 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -698,6 +698,10 @@ Documentation
Build
-----
+- Issue #27659: Prohibit implicit C function declarations: use
+ -Werror=implicit-function-declaration when possible (GCC and Clang, but it
+ depends on the compiler version). Patch written by Chi Hsuan Yen.
+
- Issue #29384: Remove old Be OS helper scripts.
- Issue #26851: Set Android compilation and link flags.
diff --git a/configure b/configure
index a624d1cf95..1126372b0b 100755
--- a/configure
+++ b/configure
@@ -7242,6 +7242,47 @@ fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_unreachable_code_warning" >&5
$as_echo "$ac_cv_enable_unreachable_code_warning" >&6; }
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can make implicit function declaration an error in $CC" >&5
+$as_echo_n "checking if we can make implicit function declaration an error in $CC... " >&6; }
+ ac_save_cc="$CC"
+ CC="$CC -Werror=implicit-function-declaration"
+ if ${ac_cv_enable_implicit_function_declaration_error+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+ ac_cv_enable_implicit_function_declaration_error=yes
+
+else
+
+ ac_cv_enable_implicit_function_declaration_error=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+ CC="$ac_save_cc"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_implicit_function_declaration_error" >&5
+$as_echo "$ac_cv_enable_implicit_function_declaration_error" >&6; }
+
+ if test $ac_cv_enable_implicit_function_declaration_error = yes
+ then
+ CFLAGS_NODIST="$CFLAGS_NODIST -Werror=implicit-function-declaration"
+ fi
+
# if using gcc on alpha, use -mieee to get (near) full IEEE 754
# support. Without this, treatment of subnormals doesn't follow
# the standard.
diff --git a/configure.ac b/configure.ac
index 09b54a7d5f..5610c5759d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1689,6 +1689,26 @@ yes)
fi
AC_MSG_RESULT($ac_cv_enable_unreachable_code_warning)
+ AC_MSG_CHECKING(if we can make implicit function declaration an error in $CC)
+ ac_save_cc="$CC"
+ CC="$CC -Werror=implicit-function-declaration"
+ AC_CACHE_VAL(ac_cv_enable_implicit_function_declaration_error,
+ AC_COMPILE_IFELSE(
+ [
+ AC_LANG_PROGRAM([[]], [[]])
+ ],[
+ ac_cv_enable_implicit_function_declaration_error=yes
+ ],[
+ ac_cv_enable_implicit_function_declaration_error=no
+ ]))
+ CC="$ac_save_cc"
+ AC_MSG_RESULT($ac_cv_enable_implicit_function_declaration_error)
+
+ if test $ac_cv_enable_implicit_function_declaration_error = yes
+ then
+ CFLAGS_NODIST="$CFLAGS_NODIST -Werror=implicit-function-declaration"
+ fi
+
# if using gcc on alpha, use -mieee to get (near) full IEEE 754
# support. Without this, treatment of subnormals doesn't follow
# the standard.