From 7b3a7c6b89ac691b48179dcdf7a7ea44fec22afd Mon Sep 17 00:00:00 2001 From: dsh Date: Mon, 13 Aug 2007 21:55:01 +0000 Subject: [PATCH] gcc/ 2007-08-3 1 Dan Hipschman PR 32953 * c-format.c (check_format_arg): Move check for zero-length format strings below the check for unterminated strings. testsuite/ 2007-08-13 Dan Hipschman PR 32953 * gcc.dg/format/array-1.c: Add an additional test for unterminated format strings of length 1. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@127399 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 6 ++++++ gcc/c-format.c | 9 ++------- gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/gcc.dg/format/array-1.c | 6 ++++-- 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a2f9281..186a050 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2007-08-13 Dan Hipschman + + PR c/32953 + * c-format.c (check_format_arg): Move check for zero-length + format strings below the check for unterminated strings. + 2007-08-13 Andrew Pinski PR C/30427 diff --git a/gcc/c-format.c b/gcc/c-format.c index 8a36dd4..a496541 100644 --- a/gcc/c-format.c +++ b/gcc/c-format.c @@ -1401,21 +1401,16 @@ check_format_arg (void *ctx, tree format_tree, format_chars += offset; format_length -= offset; } - if (format_length < 1) + if (format_length < 1 || format_chars[--format_length] != 0) { res->number_unterminated++; return; } - if (format_length == 1) + if (format_length == 0) { res->number_empty++; return; } - if (format_chars[--format_length] != 0) - { - res->number_unterminated++; - return; - } /* Skip to first argument to check. */ while (arg_num + 1 < info->first_arg_num) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9595f222..8b1e57f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2007-08-13 Dan Hipschman + + PR c/32953 + * gcc.dg/format/array-1.c: Add an additional test for + unterminated format strings of length 1. + 2007-08-13 Paul Thomas PR fortran/32926 diff --git a/gcc/testsuite/gcc.dg/format/array-1.c b/gcc/testsuite/gcc.dg/format/array-1.c index fa27abe..14db56e 100644 --- a/gcc/testsuite/gcc.dg/format/array-1.c +++ b/gcc/testsuite/gcc.dg/format/array-1.c @@ -7,7 +7,8 @@ const char a1[] = "foo"; const char a2[] = "foo%d"; -const char b[3] = "foo"; +const char b1[3] = "foo"; +const char b2[1] = "1"; static const char c1[] = "foo"; static const char c2[] = "foo%d"; char d[] = "foo"; @@ -23,7 +24,8 @@ foo (int i, long l) printf (a1); printf (a2, i); printf (a2, l); /* { dg-warning "format" "wrong type with array" } */ - printf (b); /* { dg-warning "unterminated" "unterminated array" } */ + printf (b1); /* { dg-warning "unterminated" "unterminated array" } */ + printf (b2); /* { dg-warning "unterminated" "unterminated array" } */ printf (c1); printf (c2, i); printf (c2, l); /* { dg-warning "format" "wrong type with array" } */ -- 2.7.4