Diagnose use of [*] in old-style parameter definitions (PR c/88704).
authorJoseph Myers <joseph@codesourcery.com>
Tue, 3 Dec 2019 01:27:43 +0000 (01:27 +0000)
committerJoseph Myers <jsm28@gcc.gnu.org>
Tue, 3 Dec 2019 01:27:43 +0000 (01:27 +0000)
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

gcc/c/ChangeLog
gcc/c/c-decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/vla-25.c [new file with mode: 0644]

index c04443ea6f9f9178f8813e1591834dd8592a9b08..3ea177ffbd6b855913f5024490d836857efdc8b2 100644 (file)
@@ -1,3 +1,9 @@
+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
index bf1857dc3fae63bf5ef845018d740c26e23214dc..0450fcd3514f1e5c224424cf4a1748b6dcfba005 100644 (file)
@@ -9394,6 +9394,9 @@ store_parm_decls_oldstyle (tree fndecl, const struct c_arg_info *arg_info)
                    "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))
index d5c7b0d1cf943f48188d308af7750be696140918..915c062b76e96e569bcf6d5f561f0f935396da27 100644 (file)
@@ -1,3 +1,8 @@
+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
diff --git a/gcc/testsuite/gcc.dg/vla-25.c b/gcc/testsuite/gcc.dg/vla-25.c
new file mode 100644 (file)
index 0000000..f604157
--- /dev/null
@@ -0,0 +1,9 @@
+/* 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" } */
+}