+2003-10-24 Joseph S. Myers <jsm@polyomino.org.uk>
+
+ * c-parse.in (array_declarator): Use expr_no_commas.
+ Fixes PR c/11943.
+
2003-10-24 Richard Sandiford <rsandifo@redhat.com>
* config/mips/linux.h: Wrap MD_FALLBACK_FRAME_STATE_FOR and
/* The [...] part of a declarator for an array type. */
array_declarator:
- '[' maybe_type_quals_attrs expr ']'
+ '[' maybe_type_quals_attrs expr_no_commas ']'
{ $$ = build_array_declarator ($3, $2, 0, 0); }
| '[' maybe_type_quals_attrs ']'
{ $$ = build_array_declarator (NULL_TREE, $2, 0, 0); }
| '[' maybe_type_quals_attrs '*' ']'
{ $$ = build_array_declarator (NULL_TREE, $2, 0, 1); }
- | '[' STATIC maybe_type_quals_attrs expr ']'
+ | '[' STATIC maybe_type_quals_attrs expr_no_commas ']'
{ $$ = build_array_declarator ($4, $3, 1, 0); }
/* declspecs_nosc_nots is a synonym for type_quals_attrs. */
- | '[' declspecs_nosc_nots STATIC expr ']'
+ | '[' declspecs_nosc_nots STATIC expr_no_commas ']'
{ $$ = build_array_declarator ($4, $2, 1, 0); }
;
--- /dev/null
+/* Test for C99 array declarators: expression must be an
+ assignment-expression. PR 11943. */
+/* Origin: Joseph Myers <jsm@polyomino.org.uk> */
+/* { dg-do compile } */
+/* { dg-options "-std=iso9899:1999 -pedantic-errors" } */
+
+void
+foo (void)
+{
+ int a[2, 3]; /* { dg-error "parse|syntax" "bad array declarator" } */
+ void b(int x[2, 3]); /* { dg-error "parse|syntax" "bad array declarator" } */
+ void c(int [2, 3]); /* { dg-error "parse|syntax" "bad array declarator" } */
+ void d(int *x[restrict 2, 3]); /* { dg-error "parse|syntax" "bad array declarator" } */
+ void e(int *x[static restrict 2, 3]); /* { dg-error "parse|syntax" "bad array declarator" } */
+ void f(int *x[restrict static 2, 3]); /* { dg-error "parse|syntax" "bad array declarator" } */
+}