Make -Wformat-nonliteral work with gcc

After looking into why the build failed for Simon but not for me, we
found that the underlying cause was due to how gcc treats
-Wformat-nonliteral.  gcc requires -Wformat to be given first; but
warning.m4 was not doing this, so -Wformat-nonliteral was not being
used.

This patch changes warning.m4 to account gcc's requirement.

This then showed that the target-float.c build change in the earlier
Makefile patch was also incorrect.  Simon didn't see this in his
build, but gcc now points it out.  So, this patch fixes this problem
as well.

2018-09-05  Tom Tromey  <tom@tromey.com>

	* warning.m4 (AM_GDB_WARNINGS): Add -Wformat when testing
	-Wformat-nonliteral.
	* target-float.c (host_float_ops<T>::to_string)
	(host_float_ops<T>::from_string): Use
	DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL.
	* configure: Rebuild.

gdb/gdbserver/ChangeLog
2018-09-05  Tom Tromey  <tom@tromey.com>

	* configure: Rebuild.
This commit is contained in:
Tom Tromey 2018-09-05 13:46:47 -06:00
parent af39b1c216
commit f1628857d7
6 changed files with 50 additions and 3 deletions

View File

@ -1,3 +1,12 @@
2018-09-05 Tom Tromey <tom@tromey.com>
* warning.m4 (AM_GDB_WARNINGS): Add -Wformat when testing
-Wformat-nonliteral.
* target-float.c (host_float_ops<T>::to_string)
(host_float_ops<T>::from_string): Use
DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL.
* configure: Rebuild.
2018-09-05 Simon Marchi <simon.marchi@ericsson.com>
* printcmd.c (printf_c_string): Use

11
gdb/configure vendored
View File

@ -15427,7 +15427,10 @@ case "${host}" in
build_warnings="$build_warnings -Wno-unknown-pragmas"
# Solaris 11 <unistd.h> marks vfork deprecated.
build_warnings="$build_warnings -Wno-deprecated-declarations" ;;
*) build_warnings="$build_warnings -Wformat-nonliteral" ;;
*)
# Note that gcc requires -Wformat for -Wformat-nonliteral to work,
# but there's a special case for this below.
build_warnings="$build_warnings -Wformat-nonliteral" ;;
esac
# Check whether --enable-build-warnings was given.
@ -15483,6 +15486,12 @@ $as_echo_n "checking compiler warning flags... " >&6; }
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

View File

@ -1,3 +1,7 @@
2018-09-05 Tom Tromey <tom@tromey.com>
* configure: Rebuild.
2018-08-28 Simon Marchi <simon.marchi@polymtl.ca>
PR build/23399

View File

@ -7258,7 +7258,10 @@ case "${host}" in
build_warnings="$build_warnings -Wno-unknown-pragmas"
# Solaris 11 <unistd.h> marks vfork deprecated.
build_warnings="$build_warnings -Wno-deprecated-declarations" ;;
*) build_warnings="$build_warnings -Wformat-nonliteral" ;;
*)
# Note that gcc requires -Wformat for -Wformat-nonliteral to work,
# but there's a special case for this below.
build_warnings="$build_warnings -Wformat-nonliteral" ;;
esac
# Check whether --enable-build-warnings was given.
@ -7314,6 +7317,12 @@ $as_echo_n "checking compiler warning flags... " >&6; }
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

View File

@ -948,7 +948,11 @@ host_float_ops<T>::to_string (const gdb_byte *addr, const struct type *type,
T host_float;
from_target (type, addr, &host_float);
DIAGNOSTIC_PUSH
DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
return string_printf (host_format.c_str (), host_float);
DIAGNOSTIC_POP
}
/* Parse string IN into a target floating-number of type TYPE and
@ -977,7 +981,10 @@ host_float_ops<T>::from_string (gdb_byte *addr, const struct type *type,
scan_format += scanf_length_modifier<T>::value;
scan_format += "g%n";
DIAGNOSTIC_PUSH
DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
num = sscanf (in.c_str (), scan_format.c_str(), &host_float, &n);
DIAGNOSTIC_POP
/* The sscanf man page suggests not making any assumptions on the effect
of %n on the result, so we don't.

View File

@ -58,7 +58,10 @@ case "${host}" in
build_warnings="$build_warnings -Wno-unknown-pragmas"
# Solaris 11 <unistd.h> marks vfork deprecated.
build_warnings="$build_warnings -Wno-deprecated-declarations" ;;
*) build_warnings="$build_warnings -Wformat-nonliteral" ;;
*)
# Note that gcc requires -Wformat for -Wformat-nonliteral to work,
# but there's a special case for this below.
build_warnings="$build_warnings -Wformat-nonliteral" ;;
esac
AC_ARG_ENABLE(build-warnings,
@ -106,6 +109,12 @@ then
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