Diagnose use of [*] in old-style parameter definitions (PR c/88704).
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
This commit is contained in:
parent
b650026dff
commit
85d1195708
@ -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
|
||||
|
@ -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))
|
||||
|
@ -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
|
||||
|
9
gcc/testsuite/gcc.dg/vla-25.c
Normal file
9
gcc/testsuite/gcc.dg/vla-25.c
Normal file
@ -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" } */
|
||||
}
|
Loading…
Reference in New Issue
Block a user