1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-08-08 17:42:12 +03:00

Fix testsuite build for GCC 7 -Wformat-truncation.

This patch fixes the glibc testsuite build for GCC 7
-Wformat-truncation, newly moved out of -Wformat-length and with some
further warnings that didn't previously appear.  Two tests that
previously disabled -Wformat-length are changed to disable
-Wformat-truncation instead; two others are made to disable that
option as well.

Tested (compilation only) with build-many-glibcs.py for aarch64 with
GCC mainline.

	* stdio-common/tst-printf.c [__GNUC_PREREQ (7, 0)]: Ignore
	-Wformat-truncation instead of -Wformat-length.
	* time/tst-strptime2.c (mkbuf) [__GNUC_PREREQ (7, 0)]: Likewise.
	* stdio-common/tstdiomisc.c (F): Ignore -Wformat-truncation for
	GCC 7.
	* wcsmbs/tst-wcstof.c: Include <libc-internal.h>.
	(do_test): Ignore -Wformat-truncation for GCC 7.
This commit is contained in:
Joseph Myers
2017-01-11 14:02:23 +00:00
parent 436cfba0ab
commit 3c9378265a
5 changed files with 30 additions and 3 deletions

View File

@@ -1,5 +1,13 @@
2017-01-11 Joseph Myers <joseph@codesourcery.com> 2017-01-11 Joseph Myers <joseph@codesourcery.com>
* stdio-common/tst-printf.c [__GNUC_PREREQ (7, 0)]: Ignore
-Wformat-truncation instead of -Wformat-length.
* time/tst-strptime2.c (mkbuf) [__GNUC_PREREQ (7, 0)]: Likewise.
* stdio-common/tstdiomisc.c (F): Ignore -Wformat-truncation for
GCC 7.
* wcsmbs/tst-wcstof.c: Include <libc-internal.h>.
(do_test): Ignore -Wformat-truncation for GCC 7.
* locale/programs/ld-address.c (INT_STR_ELEM): Increase size of * locale/programs/ld-address.c (INT_STR_ELEM): Increase size of
buffer used to print long int value. buffer used to print long int value.

View File

@@ -33,8 +33,9 @@
DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wformat"); DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wformat");
#if __GNUC_PREREQ (7, 0) #if __GNUC_PREREQ (7, 0)
/* Compiler warnings about format lengths should also be ignored. */ /* Compiler warnings about snprintf output truncation should also be
DIAG_IGNORE_NEEDS_COMMENT (7.0, "-Wformat-length"); ignored. */
DIAG_IGNORE_NEEDS_COMMENT (7.0, "-Wformat-truncation");
#endif #endif
static void rfg1 (void); static void rfg1 (void);

View File

@@ -94,6 +94,14 @@ F (void)
qnanval = NAN; qnanval = NAN;
/* The %f and %F arguments are in fact constants, but GCC is
prevented from seeing this (volatile is used) so it cannot tell
that the output is not truncated. */
DIAG_PUSH_NEEDS_COMMENT;
#if __GNUC_PREREQ (7, 0)
DIAG_IGNORE_NEEDS_COMMENT (7.0, "-Wformat-truncation");
#endif
snprintf (buf, sizeof buf, "%a %A %e %E %f %F %g %G", snprintf (buf, sizeof buf, "%a %A %e %E %f %F %g %G",
qnanval, qnanval, qnanval, qnanval, qnanval, qnanval, qnanval, qnanval,
qnanval, qnanval, qnanval, qnanval); qnanval, qnanval, qnanval, qnanval);
@@ -260,6 +268,8 @@ F (void)
printf ("expected L\"-inf -INF -inf -INF -inf -INF -inf -INF\", got L\"%S\"\n", printf ("expected L\"-inf -INF -inf -INF -inf -INF -inf -INF\", got L\"%S\"\n",
wbuf); wbuf);
DIAG_POP_NEEDS_COMMENT;
return result; return result;
} }

View File

@@ -73,7 +73,7 @@ mkbuf (char *buf, bool neg, bool colon, unsigned int hhmm, size_t ndigits)
This test is explicitly using short buffers to force snprintf to truncate This test is explicitly using short buffers to force snprintf to truncate
the output so we ignore the warnings. */ the output so we ignore the warnings. */
DIAG_PUSH_NEEDS_COMMENT; DIAG_PUSH_NEEDS_COMMENT;
DIAG_IGNORE_NEEDS_COMMENT (7.0, "-Wformat-length"); DIAG_IGNORE_NEEDS_COMMENT (7.0, "-Wformat-truncation");
#endif #endif
if (colon) if (colon)
snprintf (buf + i, ndigits + 2, "%02u:%02u", hh, mm); snprintf (buf + i, ndigits + 2, "%02u:%02u", hh, mm);

View File

@@ -3,6 +3,7 @@
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <wctype.h> #include <wctype.h>
#include <libc-internal.h>
static int static int
do_test (void) do_test (void)
@@ -14,7 +15,14 @@ do_test (void)
tmp[1] = '1'; tmp[1] = '1';
tmp[2] = 0; tmp[2] = 0;
/* GCC does not know the result of wcstof so cannot see that the
snprintf output is not truncated. */
DIAG_PUSH_NEEDS_COMMENT;
#if __GNUC_PREREQ (7, 0)
DIAG_IGNORE_NEEDS_COMMENT (7.0, "-Wformat-truncation");
#endif
snprintf (buf, 100, "%S = %f", tmp, wcstof (tmp, NULL)); snprintf (buf, 100, "%S = %f", tmp, wcstof (tmp, NULL));
DIAG_POP_NEEDS_COMMENT;
printf ("\"%s\" -> %s\n", buf, printf ("\"%s\" -> %s\n", buf,
strcmp (buf, "81 = 81.000000") == 0 ? "okay" : "buggy"); strcmp (buf, "81 = 81.000000") == 0 ? "okay" : "buggy");
result |= strcmp (buf, "81 = 81.000000") != 0; result |= strcmp (buf, "81 = 81.000000") != 0;