diff options
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/c-format.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | 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 a2f92818320..186a050fd46 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2007-08-13 Dan Hipschman <dsh@google.com> + + 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 <pinskia@gmail.com> PR C/30427 diff --git a/gcc/c-format.c b/gcc/c-format.c index 8a36dd412fb..a4965418d53 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 9595f222548..8b1e57f38e5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2007-08-13 Dan Hipschman <dsh@google.com> + + 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 <pault@gcc.gnu.org> PR fortran/32926 diff --git a/gcc/testsuite/gcc.dg/format/array-1.c b/gcc/testsuite/gcc.dg/format/array-1.c index fa27abe1dee..14db56e03ab 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" } */ |