GCC wrongly accepts [*] in old-style parameter definitions because
because parm_flag is set on the scope used for those definitions and,
unlike the case of a prototype in a function definition, there is no
subsequent check to disallow this invalid usage. This patch adds such
a check. (At this point we don't have location information for the
[*], so the diagnostic location isn't ideal.)
Bootstrapped with no regressions for x86_64-pc-linux-gnu.
PR c/88704
gcc/c:
* c-decl.c (store_parm_decls_oldstyle): Diagnose use of [*] in
old-style parameter definitions.
gcc/testsuite:
* gcc.dg/vla-25.c: New test.
From-SVN: r278917
+2019-12-03 Joseph Myers <joseph@codesourcery.com>
+
+ PR c/88704
+ * c-decl.c (store_parm_decls_oldstyle): Diagnose use of [*] in
+ old-style parameter definitions.
+
2019-12-01 Sandra Loosemore <sandra@codesourcery.com>
PR target/92499
"old-style function definition");
}
+ if (current_scope->had_vla_unspec)
+ error ("%<[*]%> not allowed in other than function prototype scope");
+
/* Match each formal parameter name with its declaration. Save each
decl in the appropriate TREE_PURPOSE slot of the parmids chain. */
for (parm = parmids; parm; parm = TREE_CHAIN (parm))
+2019-12-03 Joseph Myers <joseph@codesourcery.com>
+
+ PR c/88704
+ * gcc.dg/vla-25.c: New test.
+
2019-12-03 Jakub Jelinek <jakub@redhat.com>
* g++.dg/lto/inline-crossmodule-1_0.C: Use -fdump-ipa-inline-details
--- /dev/null
+/* Test [*] diagnosed on old-style parameter declaration. PR c/88704. */
+/* { dg-do compile } */
+/* { dg-options "-std=c99 -pedantic-errors" } */
+
+void
+f (x)
+ int x[*];
+{ /* { dg-error "not allowed in other than function prototype scope" } */
+}