From 4da6be3f1ad66987b7e072e578183798b3c29cb0 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Sat, 23 Dec 2023 01:00:08 -0500 Subject: [PATCH] sim: warnings: rework individual flag disable into dedicated vars The -Wshadow=local is too new for some compilers, so move it to a var that we test at configure time. --- sim/Makefile.in | 9 +-- sim/configure | 127 ++++++++++++++++++++++++++++++++------- sim/cris/local.mk | 6 +- sim/m4/sim_ac_option_warnings.m4 | 66 +++++++++++++------- 4 files changed, 157 insertions(+), 51 deletions(-) diff --git a/sim/Makefile.in b/sim/Makefile.in index 6b73533..5fa0230 100644 --- a/sim/Makefile.in +++ b/sim/Makefile.in @@ -1677,6 +1677,8 @@ SDL_LIBS = @SDL_LIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ +SIM_CFLAG_WNO_SHADOW_LOCAL = @SIM_CFLAG_WNO_SHADOW_LOCAL@ +SIM_CFLAG_WNO_UNUSED_BUT_SET_VARIABLE = @SIM_CFLAG_WNO_UNUSED_BUT_SET_VARIABLE@ SIM_ENABLED_ARCHES = @SIM_ENABLED_ARCHES@ SIM_FRV_TRAPDUMP_FLAGS = @SIM_FRV_TRAPDUMP_FLAGS@ SIM_HW_CFLAGS = @SIM_HW_CFLAGS@ @@ -2160,10 +2162,9 @@ testsuite_common_CPPFLAGS = \ @SIM_ENABLE_ARCH_cr16_TRUE@cr16_gencode_SOURCES = cr16/gencode.c @SIM_ENABLE_ARCH_cr16_TRUE@cr16_gencode_LDADD = cr16/cr16-opc.o -@SIM_ENABLE_ARCH_cris_TRUE@AM_CFLAGS_cris_mloopv10f.o = \ -@SIM_ENABLE_ARCH_cris_TRUE@ -Wno-unused-but-set-variable \ -@SIM_ENABLE_ARCH_cris_TRUE@ -Wno-shadow=local -@SIM_ENABLE_ARCH_cris_TRUE@AM_CFLAGS_cris_mloopv32f.o = -Wno-unused-but-set-variable +@SIM_ENABLE_ARCH_cris_TRUE@AM_CFLAGS_cris_mloopv10f.o = $(SIM_CFLAG_WNO_UNUSED_BUT_SET_VARIABLE) \ +@SIM_ENABLE_ARCH_cris_TRUE@ $(SIM_CFLAG_WNO_SHADOW_LOCAL) +@SIM_ENABLE_ARCH_cris_TRUE@AM_CFLAGS_cris_mloopv32f.o = $(SIM_CFLAG_WNO_UNUSED_BUT_SET_VARIABLE) @SIM_ENABLE_ARCH_cris_TRUE@nodist_cris_libsim_a_SOURCES = \ @SIM_ENABLE_ARCH_cris_TRUE@ cris/modules.c diff --git a/sim/configure b/sim/configure index d179055..62ef890 100755 --- a/sim/configure +++ b/sim/configure @@ -657,6 +657,8 @@ SIM_MIPS_FPU_BITSIZE SIM_MIPS_BITSIZE SIM_MIPS_SUBTARGET SIM_FRV_TRAPDUMP_FLAGS +SIM_CFLAG_WNO_UNUSED_BUT_SET_VARIABLE +SIM_CFLAG_WNO_SHADOW_LOCAL IGEN_FLAGS_SMP SIM_INLINE SIM_HW_SOCKSER @@ -12290,7 +12292,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12293 "configure" +#line 12295 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12396,7 +12398,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 12399 "configure" +#line 12401 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -15906,28 +15908,23 @@ $as_echo_n "checking compiler warning flags... " >&6; } # Separate out the -Werror flag as some files just cannot be # compiled with it enabled. for w in ${build_warnings}; do - # GCC does not complain about -Wno-unknown-warning. Invert - # and test -Wunknown-warning instead. - case $w in - -Wno-*) - wtest=`echo $w | sed 's/-Wno-/-W/g'` ;; - -Wformat-nonliteral) - # gcc requires -Wformat before -Wformat-nonliteral - # will work, so stick them together. - w="-Wformat $w" - wtest="$w" - ;; - *) - wtest=$w ;; - esac - case $w in -Werr*) WERROR_CFLAGS=-Werror ;; - *) - # Check whether GCC accepts it. - saved_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -Werror $wtest" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + *) w="$w" + case $w in + -Wno-*) + wtest=`echo $w | sed 's/-Wno-/-W/g'` ;; + -Wformat-nonliteral) + w="-Wformat $w" + wtest="$w" + ;; + *) + wtest=$w ;; + esac + + saved_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Werror $wtest" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -15942,11 +15939,95 @@ if ac_fn_c_try_compile "$LINENO"; then : WARN_CFLAGS="${WARN_CFLAGS} $w" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS="$saved_CFLAGS" + CFLAGS="$saved_CFLAGS" + ;; esac done { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${WARN_CFLAGS} ${WERROR_CFLAGS}" >&5 $as_echo "${WARN_CFLAGS} ${WERROR_CFLAGS}" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -Wno-shadow=local is supported" >&5 +$as_echo_n "checking whether -Wno-shadow=local is supported... " >&6; } + w="-Wno-shadow=local" + case $w in + -Wno-*) + wtest=`echo $w | sed 's/-Wno-/-W/g'` ;; + -Wformat-nonliteral) + w="-Wformat $w" + wtest="$w" + ;; + *) + wtest=$w ;; + esac + + saved_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Werror $wtest" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + SIM_CFLAG_WNO_SHADOW_LOCAL=-Wno-shadow=local + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$saved_CFLAGS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -Wno-unused-but-set-variable is supported" >&5 +$as_echo_n "checking whether -Wno-unused-but-set-variable is supported... " >&6; } + w="-Wno-unused-but-set-variable" + case $w in + -Wno-*) + wtest=`echo $w | sed 's/-Wno-/-W/g'` ;; + -Wformat-nonliteral) + w="-Wformat $w" + wtest="$w" + ;; + *) + wtest=$w ;; + esac + + saved_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Werror $wtest" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + SIM_CFLAG_WNO_UNUSED_BUT_SET_VARIABLE=-Wno-unused-but-set-variable + + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$saved_CFLAGS" + fi diff --git a/sim/cris/local.mk b/sim/cris/local.mk index a8eea65..fe3f3c8 100644 --- a/sim/cris/local.mk +++ b/sim/cris/local.mk @@ -17,10 +17,10 @@ ## along with this program. If not, see . ## Some CGEN kludges are causing build-time warnings. See cris.cpu for details. -AM_CFLAGS_%C%_mloopv10f.o = -Wno-unused-but-set-variable -AM_CFLAGS_%C%_mloopv32f.o = -Wno-unused-but-set-variable +AM_CFLAGS_%C%_mloopv10f.o = $(SIM_CFLAG_WNO_UNUSED_BUT_SET_VARIABLE) +AM_CFLAGS_%C%_mloopv32f.o = $(SIM_CFLAG_WNO_UNUSED_BUT_SET_VARIABLE) ## Some CGEN assignments use variable names that are nested & repeated. -AM_CFLAGS_%C%_mloopv10f.o += -Wno-shadow=local +AM_CFLAGS_%C%_mloopv10f.o += $(SIM_CFLAG_WNO_SHADOW_LOCAL) nodist_%C%_libsim_a_SOURCES = \ %D%/modules.c diff --git a/sim/m4/sim_ac_option_warnings.m4 b/sim/m4/sim_ac_option_warnings.m4 index 1c2d091..02b5ffa 100644 --- a/sim/m4/sim_ac_option_warnings.m4 +++ b/sim/m4/sim_ac_option_warnings.m4 @@ -128,33 +128,57 @@ then # Separate out the -Werror flag as some files just cannot be # compiled with it enabled. for w in ${build_warnings}; do - # GCC does not complain about -Wno-unknown-warning. Invert - # and test -Wunknown-warning instead. - case $w in - -Wno-*) - wtest=`echo $w | sed 's/-Wno-/-W/g'` ;; - -Wformat-nonliteral) - # gcc requires -Wformat before -Wformat-nonliteral - # will work, so stick them together. - w="-Wformat $w" - wtest="$w" - ;; - *) - wtest=$w ;; - esac - case $w in -Werr*) WERROR_CFLAGS=-Werror ;; - *) - # Check whether GCC accepts it. - saved_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -Werror $wtest" - AC_TRY_COMPILE([],[],WARN_CFLAGS="${WARN_CFLAGS} $w",) - CFLAGS="$saved_CFLAGS" + *) _SIM_TEST_WARNING_FLAG($w, [WARN_CFLAGS="${WARN_CFLAGS} $w"]) ;; esac done AC_MSG_RESULT(${WARN_CFLAGS} ${WERROR_CFLAGS}) + + dnl Test individual flags to export to dedicated variables. + m4_map([_SIM_EXPORT_WARNING_FLAG], m4_split(m4_normalize([ + -Wno-shadow=local + -Wno-unused-but-set-variable + ])))dnl fi ]) +dnl Test a warning flag $1 and execute $2 if it passes, else $3. +AC_DEFUN([_SIM_TEST_WARNING_FLAG], [dnl + dnl GCC does not complain about -Wno-unknown-warning. Invert + dnl and test -Wunknown-warning instead. + w="$1" + case $w in + -Wno-*) + wtest=`echo $w | sed 's/-Wno-/-W/g'` ;; + -Wformat-nonliteral) + dnl gcc requires -Wformat before -Wformat-nonliteral + dnl will work, so stick them together. + w="-Wformat $w" + wtest="$w" + ;; + *) + wtest=$w ;; + esac + + dnl Check whether GCC accepts it. + saved_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Werror $wtest" + AC_TRY_COMPILE([],[],$2,$3) + CFLAGS="$saved_CFLAGS" +]) +dnl Export variable $1 to $2 for use in makefiles. +AC_DEFUN([_SIM_EXPORT_WARNING], [dnl + AS_VAR_SET($1, $2) + AC_SUBST($1) +]) +dnl Test if $1 is a known warning flag, and export a variable for makefiles. +dnl If $1=-Wfoo, then SIM_CFLAG_WFOO will be set to -Wfoo if it's supported. +AC_DEFUN([_SIM_EXPORT_WARNING_FLAG], [dnl + AC_MSG_CHECKING([whether $1 is supported]) + _SIM_TEST_WARNING_FLAG($1, [dnl + _SIM_EXPORT_WARNING([SIM_CFLAG]m4_toupper(m4_translit($1, [-= ], [__])), $1) + AC_MSG_RESULT(yes) + ], [AC_MSG_RESULT(no)]) +]) AC_SUBST(WARN_CFLAGS) AC_SUBST(WERROR_CFLAGS) -- 2.7.4