From d46571c803a80a1ee0b7360f0667a8e315a9b959 Mon Sep 17 00:00:00 2001 From: Dan Hipschman Date: Mon, 13 Aug 2007 14:55:01 -0700 Subject: [PATCH] 2007-08-3 1 Dan Hipschman 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. From-SVN: r127399 --- 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 a2f92818320..186a050fd46 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 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 + + 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 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" } */ -- 2.30.2