]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
c: Restore warning for incomplete structures declared in parameter list [PR117866]
authorMartin Uecker <uecker@tugraz.at>
Mon, 6 Jan 2025 14:32:16 +0000 (15:32 +0100)
committerMartin Uecker <uecker@gcc.gnu.org>
Thu, 9 Jan 2025 20:53:28 +0000 (21:53 +0100)
In C23 mode the warning about declaring structures and union in
parameter lists was removed, because it is possible to redeclare
a compatible type elsewhere.  This is not the case for incomplete types,
so restore the warning for those types.

PR c/117866

gcc/c/ChangeLog:
* c-decl.cc (get_parm_info): Change condition for warning.

gcc/testsuite/ChangeLog:
* gcc.dg/pr117866.c: New test.
* gcc.dg/strub-pr118007.c: Adapt.

gcc/c/c-decl.cc
gcc/testsuite/gcc.dg/pr117866.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/strub-pr118007.c

index f60b2a54a17aef49498b1f39084da6531a816e29..56d13884182d9a821738c47f5aee2949c94f6c74 100644 (file)
@@ -8677,7 +8677,7 @@ get_parm_info (bool ellipsis, tree expr)
              if (b->id)
                {
                  /* The %s will be one of 'struct', 'union', or 'enum'.  */
-                 if (!flag_isoc23)
+                 if (!flag_isoc23 || !COMPLETE_TYPE_P (decl))
                    warning_at (b->locus, 0,
                                "%<%s %E%> declared inside parameter list"
                                " will not be visible outside of this definition or"
diff --git a/gcc/testsuite/gcc.dg/pr117866.c b/gcc/testsuite/gcc.dg/pr117866.c
new file mode 100644 (file)
index 0000000..3caf707
--- /dev/null
@@ -0,0 +1,5 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c23" } */
+
+void convert(struct fractpoint *pt);   /* { dg-warning "declared inside parameter list" } */
+
index 6c24cad652968b15391099d93d18d0c3152c597a..51f48245b3f2d36a24756b939a75697471d99f00 100644 (file)
@@ -2,4 +2,4 @@
 /* { dg-do compile } */
 /* { dg-options "-fstrub=all -O2" } */
 
-void rb_ec_error_print(struct rb_execution_context_struct *volatile) {}
+void rb_ec_error_print(struct rb_execution_context_struct *volatile) {}        /* { dg-warning "declared inside parameter list" } */