]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
c: Revert C2x changes to function type compatibility
authorJoseph Myers <joseph@codesourcery.com>
Wed, 9 Mar 2022 22:51:23 +0000 (22:51 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Wed, 9 Mar 2022 22:51:23 +0000 (22:51 +0000)
In commit cc806126215c3f4dc187eff3bf923458d8cc6b4f, I implemented
changes that C2x had made to compatibility of unprototyped and
prototyped function types.

C2x has since completely removed unprototyped function types, making
() in a function declaration mean (void) as in C++.  While that change
isn't appropriate at the current development stage for GCC 12, it does
mean that it doesn't make sense for GCC 12 to have different rules for
unprototyped functions in C2x mode than in other modes or previous and
subsequent GCC versions.  Thus, revert the previous change to avoid it
getting into a GCC release, and update the corresponding tests to
expect the same behavior with -std=c2x as with -std=c11 (they will of
course need to change again after implementing () as meaning (void)).

Bootstrapped with no regressions for x86_64-pc-linux-gnu.

gcc/c/
* c-typeck.cc (function_types_compatible_p): Do not handle C2X
differently from earlier standards for unprototyped function type
compatibility.

gcc/testsuite/
* gcc.dg/c11-unproto-1.c, gcc.dg/c11-unproto-2.c: Update comments.
* gcc.dg/c2x-unproto-1.c, gcc.dg/c2x-unproto-2.c: Expect same
results as in C11 mode.  Update comments.

gcc/c/c-typeck.cc
gcc/testsuite/gcc.dg/c11-unproto-1.c
gcc/testsuite/gcc.dg/c11-unproto-2.c
gcc/testsuite/gcc.dg/c2x-unproto-1.c
gcc/testsuite/gcc.dg/c2x-unproto-2.c

index b37f3cfcd8be72f9b3df8c9cdf1b0a1613e299cc..54b0b0d369bdeec54f56835c9ea860c495957d54 100644 (file)
@@ -1693,7 +1693,7 @@ function_types_compatible_p (const_tree f1, const_tree f2,
 
   if (args1 == NULL_TREE)
     {
-      if (flag_isoc2x ? stdarg_p (f2) : !self_promoting_args_p (args2))
+      if (!self_promoting_args_p (args2))
        return 0;
       /* If one of these types comes from a non-prototype fn definition,
         compare that with the other type's arglist.
@@ -1706,7 +1706,7 @@ function_types_compatible_p (const_tree f1, const_tree f2,
     }
   if (args2 == NULL_TREE)
     {
-      if (flag_isoc2x ? stdarg_p (f1) : !self_promoting_args_p (args1))
+      if (!self_promoting_args_p (args1))
        return 0;
       if (TYPE_ACTUAL_ARG_TYPES (f2)
          && type_lists_compatible_p (args1, TYPE_ACTUAL_ARG_TYPES (f2),
index ea9e807a68efd1a94c7f2ffe5d6b9b2c207d7e72..0949c7bc90c50dce617dfe9b39d7920befa5d3eb 100644 (file)
@@ -1,6 +1,7 @@
-/* Test compatibility of unprototyped and prototyped function types (C2x makes
-   the case of types affected by default argument promotions compatible).  Test
-   valid-in-C2x usages are not accepted for C11.  */
+/* Test compatibility of unprototyped and prototyped function types (C2x made
+   the case of types affected by default argument promotions compatible, before
+   removing unprototyped functions completely).  Test affected usages are not
+   accepted for C11.  */
 /* { dg-do compile } */
 /* { dg-options "-std=c11 -pedantic-errors" } */
 
index 0557ae3f5cbade88428d021860e88fa25c31628b..06da935336e725e92a98a7cca1912a4535358e8b 100644 (file)
@@ -1,6 +1,7 @@
-/* Test compatibility of unprototyped and prototyped function types (C2x makes
-   the case of types affected by default argument promotions compatible).  Test
-   invalid-in-C2x usages, in C11 mode.  */
+/* Test compatibility of unprototyped and prototyped function types (C2x made
+   the case of types affected by default argument promotions compatible, before
+   removing unprototyped functions completely).  Test always-invalid-in-C2x
+   usages, in C11 mode.  */
 /* { dg-do compile } */
 /* { dg-options "-std=c11 -pedantic-errors" } */
 
index 45d68f2c2927951328d6de55dd869a94723c3070..aa87d78610e917d5a3cf39b50a410d3556313c84 100644 (file)
@@ -1,20 +1,25 @@
-/* Test compatibility of unprototyped and prototyped function types (C2x makes
-   the case of types affected by default argument promotions compatible).  Test
-   valid-in-C2x usages.  */
+/* Test compatibility of unprototyped and prototyped function types (C2x made
+   the case of types affected by default argument promotions compatible, before
+   removing unprototyped functions completely).  Test affected usages are not
+   accepted for C2x.  */
 /* { dg-do compile } */
 /* { dg-options "-std=c2x -pedantic-errors" } */
 
-void f1 ();
-void f1 (float);
+void f1 (); /* { dg-message "previous declaration" } */
+void f1 (float); /* { dg-error "conflicting types" } */
+/* { dg-message "default promotion" "" { target *-*-* } .-1 } */
 
-void f2 (float);
-void f2 ();
+void f2 (float); /* { dg-message "previous declaration" } */
+void f2 (); /* { dg-error "conflicting types" } */
+/* { dg-message "default promotion" "" { target *-*-* } .-1 } */
 
-void f3 ();
-void f3 (char);
+void f3 (); /* { dg-message "previous declaration" } */
+void f3 (char); /* { dg-error "conflicting types" } */
+/* { dg-message "default promotion" "" { target *-*-* } .-1 } */
 
-void f4 (char);
-void f4 ();
+void f4 (char); /* { dg-message "previous declaration" } */
+void f4 (); /* { dg-error "conflicting types" } */
+/* { dg-message "default promotion" "" { target *-*-* } .-1 } */
 
 /* Built-in function case.  */
-float sqrtf ();
+float sqrtf (); /* { dg-warning "conflicting types for built-in function" } */
index f826b7c3ac878bd11f76927f38bb41ced88afbb3..3d5ae9d8460d2ab8b58eda368a964ad5d96e409c 100644 (file)
@@ -1,6 +1,7 @@
-/* Test compatibility of unprototyped and prototyped function types (C2x makes
-   the case of types affected by default argument promotions compatible).  Test
-   invalid-in-C2x usages.  */
+/* Test compatibility of unprototyped and prototyped function types (C2x made
+   the case of types affected by default argument promotions compatible, before
+   removing unprototyped functions completely).  Test always-invalid-in-C2x
+   usages, in C2X mode.  */
 /* { dg-do compile } */
 /* { dg-options "-std=c2x -pedantic-errors" } */