Skip to content

Commit

Permalink
patch 8.0.1709: some non-C89 code may slip through
Browse files Browse the repository at this point in the history
Problem:    Some non-C89 code may slip through.
Solution:   Enforce C89 in configure. Fix detected problems. (James McCoy,
            closes #2735)
  • Loading branch information
brammool committed Apr 14, 2018
1 parent 78a16b0 commit 2e32495
Show file tree
Hide file tree
Showing 6 changed files with 122 additions and 12 deletions.
99 changes: 98 additions & 1 deletion src/auto/configure
Expand Up @@ -3449,6 +3449,97 @@ ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_compiler_gnu=$ac_cv_c_compiler_gnu

{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
if ${ac_cv_prog_cc_c89+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_cv_prog_cc_c89=no
ac_save_CC=$CC
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdarg.h>
#include <stdio.h>
struct stat;
/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
struct buf { int x; };
FILE * (*rcsopen) (struct buf *, struct stat *, int);
static char *e (p, i)
char **p;
int i;
{
return p[i];
}
static char *f (char * (*g) (char **, int), char **p, ...)
{
char *s;
va_list v;
va_start (v,p);
s = g (p, va_arg (v,int));
va_end (v);
return s;
}
/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
function prototypes and stuff, but not '\xHH' hex character constants.
These don't provoke an error unfortunately, instead are silently treated
as 'x'. The following induces an error, until -std is added to get
proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
array size at least. It's necessary to write '\x00'==0 to get something
that's true only with -std. */
int osf4_cc_array ['\x00' == 0 ? 1 : -1];
/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
inside strings and character constants. */
#define FOO(x) 'x'
int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
int test (int i, double x);
struct s1 {int (*f) (int a);};
struct s2 {int (*f) (double a);};
int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
int argc;
char **argv;
int
main ()
{
return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
;
return 0;
}
_ACEOF
for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
do
CC="$ac_save_CC $ac_arg"
if ac_fn_c_try_compile "$LINENO"; then :
ac_cv_prog_cc_c89=$ac_arg
fi
rm -f core conftest.err conftest.$ac_objext
test "x$ac_cv_prog_cc_c89" != "xno" && break
done
rm -f conftest.$ac_ext
CC=$ac_save_CC

fi
# AC_CACHE_VAL
case "x$ac_cv_prog_cc_c89" in
x)
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
$as_echo "none needed" >&6; } ;;
xno)
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
$as_echo "unsupported" >&6; } ;;
*)
CC="$CC $ac_cv_prog_cc_c89"
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
esac
if test "x$ac_cv_prog_cc_c89" != xno; then :

fi

ac_ext=c ac_ext=c
ac_cpp='$CPP $CPPFLAGS' ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
Expand Down Expand Up @@ -4115,6 +4206,8 @@ if test "$GCC" = yes; then
CFLAGS="$CFLAGS -fno-strength-reduce" CFLAGS="$CFLAGS -fno-strength-reduce"
fi fi
fi fi

CPPFLAGS="$CPPFLAGS -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700"
fi fi


{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang version" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clang version" >&5
Expand Down Expand Up @@ -4187,7 +4280,7 @@ if test "`(uname) 2>/dev/null`" = Darwin; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; } $as_echo "yes" >&6; }
MACOS_X=yes MACOS_X=yes
CPPFLAGS="$CPPFLAGS -DMACOS_X" CPPFLAGS="$CPPFLAGS -D_DARWIN_C_SOURCE -DMACOS_X"


{ $as_echo "$as_me:${as_lineno-$LINENO}: checking --disable-darwin argument" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking --disable-darwin argument" >&5
$as_echo_n "checking --disable-darwin argument... " >&6; } $as_echo_n "checking --disable-darwin argument... " >&6; }
Expand Down Expand Up @@ -14341,6 +14434,10 @@ if test "$zOSUnix" = "yes"; then
CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll" CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll"
fi fi


if test "$GCC" = yes -a "$GUITYPE" != "GTK"; then
CFLAGS="$CFLAGS -ansi"
fi

ac_config_files="$ac_config_files auto/config.mk:config.mk.in" ac_config_files="$ac_config_files auto/config.mk:config.mk.in"


cat >confcache <<\_ACEOF cat >confcache <<\_ACEOF
Expand Down
6 changes: 3 additions & 3 deletions src/channel.c
Expand Up @@ -672,9 +672,9 @@ channel_open(
{ {
char *p; char *p;


/* When using host->h_addr directly ubsan warns for it to not be /* When using host->h_addr_list[0] directly ubsan warns for it to not
* aligned. First copy the pointer to aviod that. */ * be aligned. First copy the pointer to avoid that. */
memcpy(&p, &host->h_addr, sizeof(p)); memcpy(&p, &host->h_addr_list[0], sizeof(p));
memcpy((char *)&server.sin_addr, p, host->h_length); memcpy((char *)&server.sin_addr, p, host->h_length);
} }


Expand Down
13 changes: 11 additions & 2 deletions src/configure.ac
Expand Up @@ -11,7 +11,7 @@ AC_DEFINE(UNIX)
AC_PROG_MAKE_SET AC_PROG_MAKE_SET


dnl Checks for programs. dnl Checks for programs.
AC_PROG_CC dnl required by almost everything AC_PROG_CC_C89 dnl required by almost everything
AC_PROG_CPP dnl required by header file checks AC_PROG_CPP dnl required by header file checks
AC_PROGRAM_EGREP dnl required by AC_EGREP_CPP AC_PROGRAM_EGREP dnl required by AC_EGREP_CPP
AC_PROG_FGREP dnl finds working grep -F AC_PROG_FGREP dnl finds working grep -F
Expand Down Expand Up @@ -61,6 +61,9 @@ if test "$GCC" = yes; then
CFLAGS="$CFLAGS -fno-strength-reduce" CFLAGS="$CFLAGS -fno-strength-reduce"
fi fi
fi fi

dnl Declare what standards the code should comply with
CPPFLAGS="$CPPFLAGS -D_POSIX_C_SOURCE=200809L -D_XOPEN_SOURCE=700"
fi fi


dnl clang-500.2.75 or around has abandoned -f[no-]strength-reduce and issues a dnl clang-500.2.75 or around has abandoned -f[no-]strength-reduce and issues a
Expand Down Expand Up @@ -135,7 +138,7 @@ AC_MSG_CHECKING([for Darwin (Mac OS X)])
if test "`(uname) 2>/dev/null`" = Darwin; then if test "`(uname) 2>/dev/null`" = Darwin; then
AC_MSG_RESULT(yes) AC_MSG_RESULT(yes)
MACOS_X=yes MACOS_X=yes
CPPFLAGS="$CPPFLAGS -DMACOS_X" CPPFLAGS="$CPPFLAGS -D_DARWIN_C_SOURCE -DMACOS_X"


AC_MSG_CHECKING(--disable-darwin argument) AC_MSG_CHECKING(--disable-darwin argument)
AC_ARG_ENABLE(darwin, AC_ARG_ENABLE(darwin,
Expand Down Expand Up @@ -4400,6 +4403,12 @@ if test "$zOSUnix" = "yes"; then
CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll" CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll"
fi fi


dnl Declare what standards the code should comply with. But not when using
dnl GTK, the header files cause all kinds of warnings.
if test "$GCC" = yes -a "$GUITYPE" != "GTK"; then
CFLAGS="$CFLAGS -ansi"
fi

dnl write output files dnl write output files
AC_OUTPUT(auto/config.mk:config.mk.in) AC_OUTPUT(auto/config.mk:config.mk.in)


Expand Down
12 changes: 7 additions & 5 deletions src/gui_gtk_x11.c
Expand Up @@ -5607,15 +5607,17 @@ gui_mch_free_font(GuiFont font)
guicolor_T guicolor_T
gui_mch_get_color(char_u *name) gui_mch_get_color(char_u *name)
{ {
guicolor_T color = INVALCOLOR;

if (!gui.in_use) /* can't do this when GUI not running */ if (!gui.in_use) /* can't do this when GUI not running */
return INVALCOLOR; return color;

if (name != NULL)
color = gui_get_color_cmn(name);


#if GTK_CHECK_VERSION(3,0,0) #if GTK_CHECK_VERSION(3,0,0)
return name != NULL ? gui_get_color_cmn(name) : INVALCOLOR; return color;
#else #else
guicolor_T color;

color = (name != NULL) ? gui_get_color_cmn(name) : INVALCOLOR;
if (color == INVALCOLOR) if (color == INVALCOLOR)
return INVALCOLOR; return INVALCOLOR;


Expand Down
2 changes: 1 addition & 1 deletion src/if_python3.c
Expand Up @@ -815,7 +815,7 @@ python3_end(void)
#endif #endif
if (Py_IsInitialized()) if (Py_IsInitialized())
{ {
// acquire lock before finalizing /* acquire lock before finalizing */
PyGILState_Ensure(); PyGILState_Ensure();


Py_Finalize(); Py_Finalize();
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -762,6 +762,8 @@ static char *(features[]) =


static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
1709,
/**/ /**/
1708, 1708,
/**/ /**/
Expand Down

0 comments on commit 2e32495

Please sign in to comment.