gcc/
authordsh <dsh@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 13 Aug 2007 21:55:01 +0000 (21:55 +0000)
committerdsh <dsh@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 13 Aug 2007 21:55:01 +0000 (21:55 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@127399 138bc75d-0d04-0410-961f-82ee72b054a4

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

index a2f9281..186a050 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 8a36dd4..a496541 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 9595f22..8b1e57f 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 fa27abe..14db56e 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" } */