2007-08-3 1 Dan Hipschman <dsh@google.com>
authorDan Hipschman <dsh@google.com>
Mon, 13 Aug 2007 21:55:01 +0000 (14:55 -0700)
committerDan Hipschman <dsh@gcc.gnu.org>
Mon, 13 Aug 2007 21:55:01 +0000 (14:55 -0700)
gcc/
2007-08-3 1 Dan Hipschman  <dsh@google.com>

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  <dsh@google.com>

PR 32953
* gcc.dg/format/array-1.c: Add an additional test for
unterminated format strings of length 1.

From-SVN: r127399

gcc/ChangeLog
gcc/c-format.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/format/array-1.c

index a2f92818320fa63498d7dc41c18cdd5617ea3cba..186a050fd4612708364888d72b277461bf045649 100644 (file)
@@ -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
index 8a36dd412fb041bdbdee35ea4c4b1cbdbf8ca816..a4965418d538b8d8961622097e0a1237a7a499df 100644 (file)
@@ -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)
index 9595f222548fa79d2420d99fecff7c5a60193519..8b1e57f38e55fb4d847cc86e69c90badef34dd09 100644 (file)
@@ -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
index fa27abe1dee6774c9c1a943e4c777b96b11d3df7..14db56e03aba43621e2dc1ec2b6f2ab4e934a11f 100644 (file)
@@ -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" } */