OSDN Git Service

PR c/16667
authorjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 25 Oct 2004 22:23:08 +0000 (22:23 +0000)
committerjsm28 <jsm28@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 25 Oct 2004 22:23:08 +0000 (22:23 +0000)
* c-parse.in (array_designator): New.
(designator): Use it.
(initelt): Only permit array_designator without '=', not ".foo".

testsuite:
* gcc.dg/init-desig-obs-1.c, gcc.dg/init-desig-obs-2.c,
gcc.dg/init-desig-obs-3.c: New tests.

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

gcc/ChangeLog
gcc/c-parse.in
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/init-desig-obs-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/init-desig-obs-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/init-desig-obs-3.c [new file with mode: 0644]

index 9ffe392..001043d 100644 (file)
@@ -1,3 +1,10 @@
+2004-10-25  Joseph S. Myers  <jsm@polyomino.org.uk>
+
+       PR c/16667
+       * c-parse.in (array_designator): New.
+       (designator): Use it.
+       (initelt): Only permit array_designator without '=', not ".foo".
+
 2004-10-25  Kenneth Zadeck <zadeck@naturalbridge.com>
        * gcc/Makefile.in: removed ggc for cgraphunit.
        * gcc/cgraph.c.dump_cgraph_node: removed static var analysis.
index f59db97..7f6f4f4 100644 (file)
@@ -1445,7 +1445,7 @@ initelt:
          designator_list '=' initval
                { if (pedantic && !flag_isoc99)
                    pedwarn ("ISO C90 forbids specifying subobject to initialize"); }
-       | designator initval
+       | array_designator initval
                { if (pedantic)
                    pedwarn ("obsolete use of designated initializer without %<=%>"); }
        | identifier ':'
@@ -1475,7 +1475,10 @@ designator_list:
 designator:
          '.' identifier
                { set_init_label ($2); }
-       | '[' expr_no_commas ELLIPSIS expr_no_commas ']'
+       | array_designator
+
+array_designator:
+         '[' expr_no_commas ELLIPSIS expr_no_commas ']'
                { set_init_index ($2.value, $4.value);
                  if (pedantic)
                    pedwarn ("ISO C forbids specifying range of elements to initialize"); }
index 19c32bb..68b98b2 100644 (file)
@@ -1,3 +1,9 @@
+2004-10-25  Joseph S. Myers  <jsm@polyomino.org.uk>
+
+       PR c/16667
+       * gcc.dg/init-desig-obs-1.c, gcc.dg/init-desig-obs-2.c,
+       gcc.dg/init-desig-obs-3.c: New tests.
+
 2004-10-25  Jakub Jelinek  <jakub@redhat.com>
 
        * gcc.dg/debug/20041023-1.c: New test.
diff --git a/gcc/testsuite/gcc.dg/init-desig-obs-1.c b/gcc/testsuite/gcc.dg/init-desig-obs-1.c
new file mode 100644 (file)
index 0000000..4a9df04
--- /dev/null
@@ -0,0 +1,19 @@
+/* Test obsolete forms of designated initializers.  Test with default
+   warning options: valid forms are accepted, while ".member" without
+   "=" should not be (bug 16667).  */
+/* Origin: Joseph Myers <jsm@polyomino.org.uk> */
+/* { dg-do compile } */
+/* { dg-options "" } */
+struct s { int a; };
+struct s s0 = { .a = 1 };
+struct s s1 = { a: 1 };
+
+int x0[] = { [0] = 1 };
+int x1[] = { [0] 1 };
+
+/* Invalid syntax: multiple designators without "=".  */
+int x2[2][2] = { [0][0] 1 }; /* { dg-error "(syntax|parse) error" } */
+
+
+/* Invalid syntax: C99-style structure designator without "=".  */
+struct s s2 = { .a 1 }; /* { dg-error "(syntax|parse) error" } */
diff --git a/gcc/testsuite/gcc.dg/init-desig-obs-2.c b/gcc/testsuite/gcc.dg/init-desig-obs-2.c
new file mode 100644 (file)
index 0000000..04c3b10
--- /dev/null
@@ -0,0 +1,11 @@
+/* Test obsolete forms of designated initializers.  Test with
+   -pedantic.  */
+/* Origin: Joseph Myers <jsm@polyomino.org.uk> */
+/* { dg-do compile } */
+/* { dg-options "-std=gnu99 -pedantic" } */
+struct s { int a; };
+struct s s0 = { .a = 1 };
+struct s s1 = { a: 1 }; /* { dg-warning "warning: obsolete use of designated initializer with ':'" } */
+
+int x0[] = { [0] = 1 };
+int x1[] = { [0] 1 }; /* { dg-warning "warning: obsolete use of designated initializer without '='" } */
diff --git a/gcc/testsuite/gcc.dg/init-desig-obs-3.c b/gcc/testsuite/gcc.dg/init-desig-obs-3.c
new file mode 100644 (file)
index 0000000..9cc50ba
--- /dev/null
@@ -0,0 +1,11 @@
+/* Test obsolete forms of designated initializers.  Test with
+   -pedantic-errors.  */
+/* Origin: Joseph Myers <jsm@polyomino.org.uk> */
+/* { dg-do compile } */
+/* { dg-options "-std=gnu99 -pedantic-errors" } */
+struct s { int a; };
+struct s s0 = { .a = 1 };
+struct s s1 = { a: 1 }; /* { dg-error "error: obsolete use of designated initializer with ':'" } */
+
+int x0[] = { [0] = 1 };
+int x1[] = { [0] 1 }; /* { dg-error "error: obsolete use of designated initializer without '='" } */