summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoland McGrath <roland@hack.frob.com>2014-12-11 13:46:21 -0800
committerRoland McGrath <roland@hack.frob.com>2014-12-11 13:47:44 -0800
commit1c4053db63e2a3470ed8ace2ddd9636f9a6e135c (patch)
tree9ea23fa846a90b210e9d9447f08f390153f4132b
parenta1edbf3cb8095699794d6601446c0f18cfa265a8 (diff)
downloadglibc-1c4053db63e2a3470ed8ace2ddd9636f9a6e135c.tar.gz
Eliminate -Wno-format from printf/scanf tests.
-rw-r--r--ChangeLog22
-rw-r--r--stdio-common/Makefile8
-rw-r--r--stdio-common/scanf4.c8
-rw-r--r--stdio-common/scanf7.c10
-rw-r--r--stdio-common/test-vfprintf.c6
-rw-r--r--stdio-common/tst-printf.c5
-rw-r--r--stdio-common/tst-printfsz.c4
-rw-r--r--stdio-common/tst-sprintf.c21
-rw-r--r--stdio-common/tstdiomisc.c9
9 files changed, 80 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog
index e9eed7ca2d..ad8fe210aa 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,25 @@
+2014-12-11 Roland McGrath <roland@hack.frob.com>
+
+ * stdio-common/tstdiomisc.c (t2): Ignore -Wformat and
+ -Wformat-extra-args warnings for scanf formats.
+ * stdio-common/scanf4.c (main): Ignore -Wformat-zero-length around
+ test of zero-length format (duh).
+ * stdio-common/scanf7.c (main): Ignore -Wformat warnings for
+ corner-case scanf format test.
+ * stdio-common/test-vfprintf.c (do_test): Ignore -Wformat-security for
+ generated fprintf format string.
+ * stdio-common/tst-sprintf.c (do_test): Ignore -Wformat warnings for
+ corner-case sprintf format tests.
+ * stdio-common/tst-printf.c: Ignore -Wformat throughout.
+ * stdio-common/tst-printfsz.c (main): Ignore -Wformat and
+ -Wformat-extra-args warnings throughout.
+ * stdio-common/Makefile (CFLAGS-tstdiomisc.c): Variable removed.
+ (CFLAGS-scanf4.c): Likewise.
+ (CFLAGS-scanf7.c): Likewise.
+ (CFLAGS-tst-sprintf.c): Likewise.
+ (CFLAGS-tst-printf.c): Likewise.
+ (CFLAGS-tst-printfsz.c): Likewise.
+
2014-12-11 Joseph Myers <joseph@codesourcery.com>
* include/cpio.h: New file.
diff --git a/stdio-common/Makefile b/stdio-common/Makefile
index 5f8e5341a5..f76365774a 100644
--- a/stdio-common/Makefile
+++ b/stdio-common/Makefile
@@ -80,11 +80,6 @@ endif
CFLAGS-vfprintf.c = -Wno-uninitialized
CFLAGS-vfwprintf.c = -Wno-uninitialized
-CFLAGS-tst-printf.c = -Wno-format
-CFLAGS-tstdiomisc.c = -Wno-format
-CFLAGS-scanf4.c = -Wno-format
-CFLAGS-scanf7.c = -Wno-format
-CFLAGS-tst-printfsz.c = -Wno-format
CFLAGS-tmpfile.c = -fexceptions
CFLAGS-tmpfile64.c = -fexceptions
@@ -116,9 +111,6 @@ CFLAGS-scanf15.c = -I../libio -I../stdlib -I../wcsmbs -I../time -I../string \
CFLAGS-scanf17.c = -I../libio -I../stdlib -I../wcsmbs -I../time -I../string \
-I../wctype
-# We know the test has a format string problem.
-CFLAGS-tst-sprintf.c = -Wno-format
-
CPPFLAGS += $(libio-mtsafe)
$(objpfx)tst-setvbuf1.out: /dev/null $(objpfx)tst-setvbuf1
diff --git a/stdio-common/scanf4.c b/stdio-common/scanf4.c
index f9a9134745..9bb14bb16b 100644
--- a/stdio-common/scanf4.c
+++ b/stdio-common/scanf4.c
@@ -1,5 +1,6 @@
#include <stdio.h>
#include <stdlib.h>
+#include <libc-internal.h>
int
main(int arc, char *argv[])
@@ -15,7 +16,14 @@ main(int arc, char *argv[])
printf("Result of fscanf %%n = %d\n", res);
printf("Scanned format = %d\n", val);
+ /* We're testing exactly the case the warning is for. */
+ DIAG_PUSH_NEEDS_COMMENT;
+ DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wformat-zero-length");
+
res = fscanf(fp, "");
+
+ DIAG_POP_NEEDS_COMMENT;
+
printf("Result of fscanf \"\" = %d\n", res);
if (res != 0)
abort ();
diff --git a/stdio-common/scanf7.c b/stdio-common/scanf7.c
index c746e47666..53ddf4cb09 100644
--- a/stdio-common/scanf7.c
+++ b/stdio-common/scanf7.c
@@ -1,5 +1,6 @@
#include <stdio.h>
#include <stdlib.h>
+#include <libc-internal.h>
int
main (int argc, char *argv[])
@@ -14,7 +15,16 @@ main (int argc, char *argv[])
abort ();
n = -2;
+
+ /* We are testing a corner case of the scanf format string here. */
+ DIAG_PUSH_NEEDS_COMMENT;
+ DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wformat");
+ DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wformat-extra-args");
+
ret = sscanf ("1000", "%llld", &n);
+
+ DIAG_POP_NEEDS_COMMENT;
+
printf ("%%llld: ret: %d, n: %Ld\n", ret, n);
if (ret > 0 || n >= 0L)
abort ();
diff --git a/stdio-common/test-vfprintf.c b/stdio-common/test-vfprintf.c
index 9cc56d7dcb..8483d8d885 100644
--- a/stdio-common/test-vfprintf.c
+++ b/stdio-common/test-vfprintf.c
@@ -92,7 +92,13 @@ do_test (void)
fprintf (fp, "%s", large);
fprintf (fp, "%.*s", 30000, large);
large[20000] = '\0';
+ /* We're testing a large format string here and need to generate it
+ to avoid this source file being ridiculous. So disable the warning
+ about a generated format string. */
+ DIAG_PUSH_NEEDS_COMMENT;
+ DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wformat-security");
fprintf (fp, large);
+ DIAG_POP_NEEDS_COMMENT;
fprintf (fp, "%-1.300000000s", "hello");
if (fflush (fp) != 0 || ferror (fp) != 0 || fclose (fp) != 0)
diff --git a/stdio-common/tst-printf.c b/stdio-common/tst-printf.c
index 10673ce77d..d52dc1deb1 100644
--- a/stdio-common/tst-printf.c
+++ b/stdio-common/tst-printf.c
@@ -26,6 +26,11 @@
#endif
#include <float.h>
+#include <libc-internal.h>
+
+/* This whole file is picayune tests of corner cases of printf format strings.
+ The compiler warnings are not useful here. */
+DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wformat");
static void rfg1 (void);
static void rfg2 (void);
diff --git a/stdio-common/tst-printfsz.c b/stdio-common/tst-printfsz.c
index 74d67d2f69..902b2ac27b 100644
--- a/stdio-common/tst-printfsz.c
+++ b/stdio-common/tst-printfsz.c
@@ -23,6 +23,10 @@ main (int argc, char *argv[])
register_printf_function ('B', printf_size, printf_size_info);
DIAG_POP_NEEDS_COMMENT;
+ /* All of the formats here use the nonstandard extension specifier
+ just registered, so compiler checking will never grok them. */
+ DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wformat");
+ DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wformat-extra-args");
sprintf (buf, "%g %b %B %.0b %.0B %.1b %.1B %8.0b %08.0B",
V, 1025., V, V, V, V, V, V, V, V);
diff --git a/stdio-common/tst-sprintf.c b/stdio-common/tst-sprintf.c
index 2fe373f350..ea3008b68b 100644
--- a/stdio-common/tst-sprintf.c
+++ b/stdio-common/tst-sprintf.c
@@ -45,15 +45,26 @@ do_test (void)
result = 1;
}
- if (sprintf (buf, "%67108863.16\"%d", 7) != 14
- || strcmp (buf, "%67108863.16\"7") != 0)
+ /* We are testing a corner case of the sprintf format string here. */
+ DIAG_PUSH_NEEDS_COMMENT;
+ DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wformat");
+ int n = sprintf (buf, "%67108863.16\"%d", 7);
+ DIAG_POP_NEEDS_COMMENT;
+
+ if (n != 14 || strcmp (buf, "%67108863.16\"7") != 0)
{
- printf ("sprintf (buf, \"%%67108863.16\\\"%%d\", 7) produced `%s' output", buf);
+ printf ("sprintf (buf, \"%%67108863.16\\\"%%d\", 7) produced `%s' output",
+ buf);
result = 1;
}
- if (sprintf (buf, "%*\"%d", 0x3ffffff, 7) != 11
- || strcmp (buf, "%67108863\"7") != 0)
+ /* We are testing a corner case of the sprintf format string here. */
+ DIAG_PUSH_NEEDS_COMMENT;
+ DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wformat");
+ n = sprintf (buf, "%*\"%d", 0x3ffffff, 7);
+ DIAG_POP_NEEDS_COMMENT;
+
+ if (n != 11 || strcmp (buf, "%67108863\"7") != 0)
{
printf ("sprintf (buf, \"%%*\\\"%%d\", 0x3ffffff, 7) produced `%s' output", buf);
result = 1;
diff --git a/stdio-common/tstdiomisc.c b/stdio-common/tstdiomisc.c
index 2e0663a5e5..5548a71e52 100644
--- a/stdio-common/tstdiomisc.c
+++ b/stdio-common/tstdiomisc.c
@@ -3,6 +3,7 @@
#include <stdio.h>
#include <string.h>
#include <wchar.h>
+#include <libc-internal.h>
static int
t1 (void)
@@ -28,6 +29,12 @@ t2 (void)
INPUT, FORMAT, retval, (long int) VAR); \
result |= retval != EXP_RES || VAR != EXP_VAL
+ /* This function is testing corner cases of the scanf format string,
+ so they do not all conform to -Wformat's expectations. */
+ DIAG_PUSH_NEEDS_COMMENT;
+ DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wformat");
+ DIAG_IGNORE_NEEDS_COMMENT (4.9, "-Wformat-extra-args");
+
SCAN ("12345", "%ld", N, 1, 12345);
SCAN ("12345", "%llllld", N, 0, -1);
SCAN ("12345", "%LLLLLd", N, 0, -1);
@@ -43,6 +50,8 @@ t2 (void)
retval, n, N); \
result |= retval != 1 || n != 1 || N != -1;
+ DIAG_POP_NEEDS_COMMENT;
+
return result;
}