From patchwork Thu Dec 11 21:48:06 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roland McGrath X-Patchwork-Id: 420256 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 8E4B61400F1 for ; Fri, 12 Dec 2014 08:48:23 +1100 (AEDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:mime-version:content-type :content-transfer-encoding:from:to:subject:message-id:date; q= dns; s=default; b=sI3KUq56FmP6bxUmPPo01viz+O8ImykDjqhKHKTqh1DiWa dQ3PU5UNuwPa4/vJtOvfTX03APvHYcnlxjLTU5kZb+FjG7p/fbmjgLfvR1ZlssPa KIUTbHW3syYwwiJ8ljN763TYayD50y86nVfpO7Be8zidmrDJcpmM794aCtwBk= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:mime-version:content-type :content-transfer-encoding:from:to:subject:message-id:date; s= default; bh=RwUY0+4yFYi810k9VibVHjrY8HA=; b=mS4l/w44pje9wrCHcnhg rYXj4DysU13qlV4A8TTtz4mFDfmX2a1Rwu9wTDIN9faocp3YYXrI04Kq7/dYCSOG 9hu+/OEcLxQmqbbmMp6ks0P2qL/WQfXObTeKFJwLMCKy1nUgqSRIyV6OA8xFRUnF vLyM7PJ84GgCwWDzPsPgis8= Received: (qmail 11441 invoked by alias); 11 Dec 2014 21:48:17 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 11431 invoked by uid 89); 11 Dec 2014 21:48:16 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.2 required=5.0 tests=AWL, BAYES_00 autolearn=ham version=3.3.2 X-HELO: topped-with-meat.com MIME-Version: 1.0 From: Roland McGrath To: "GNU C. Library" Subject: [COMMITTED PATCH] Eliminate -Wno-format from printf/scanf tests. Message-Id: <20141211214806.F39792C3ADB@topped-with-meat.com> Date: Thu, 11 Dec 2014 13:48:06 -0800 (PST) X-CMAE-Score: 0 X-CMAE-Analysis: v=2.1 cv=SvUDtp+0 c=1 sm=1 tr=0 a=WkljmVdYkabdwxfqvArNOQ==:117 a=14OXPxybAAAA:8 a=kj9zAlcOel0A:10 a=hOe2yjtxAAAA:8 a=KOGc6qmDLdf6yL5ZzMQA:9 a=w8jzkwe_dQWD9gss:21 a=b8icqMPu0mts9a0O:21 a=CjuIK1q_8ugA:10 2014-12-11 Roland McGrath * 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. --- 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 --- a/stdio-common/scanf4.c +++ b/stdio-common/scanf4.c @@ -1,5 +1,6 @@ #include #include +#include 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 (); --- a/stdio-common/scanf7.c +++ b/stdio-common/scanf7.c @@ -1,5 +1,6 @@ #include #include +#include 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 (); --- 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) --- a/stdio-common/tst-printf.c +++ b/stdio-common/tst-printf.c @@ -26,6 +26,11 @@ #endif #include +#include + +/* 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); --- 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); --- 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; --- a/stdio-common/tstdiomisc.c +++ b/stdio-common/tstdiomisc.c @@ -3,6 +3,7 @@ #include #include #include +#include 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; }