]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
c: Default to -std=gnu23
authorJoseph Myers <josmyers@redhat.com>
Fri, 15 Nov 2024 23:42:59 +0000 (23:42 +0000)
committerJoseph Myers <josmyers@redhat.com>
Fri, 15 Nov 2024 23:45:57 +0000 (23:45 +0000)
Change the default language version for C compilation from -std=gnu17
to -std=gnu23.  A few tests are updated to remove local definitions of
bool, true and false (where making such an unconditional test change
seemed to make more sense than changing the test conditionally earlier
or building it with -std=gnu17); most test issues were already
addressed in previous patches.  In the case of
ctf-function-pointers-2.c, it was agreed in bug 117289 that it would
be OK to put -std=gnu17 in the test and leave more optimal BTF / CTF
output for this test as a potential future improvement.

Since the original test fixes, more such fixes have become necessary
and so are included in this patch.  More noinline attributes are added
to simulate-thread tests where () meaning a prototype affected test
results, while gcc.dg/torture/pr117496-1.c (a test declaring a
function with () then calling it with arguments) gets -std=gnu17
added.

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

NOTE: it's likely there are target-specific tests for non-x86 targets
that need updating as a result of this change.  See commit
9fb5348e3021021e82d75e4ca4e6f8d51a34c24f ("testsuite: Prepare for
-std=gnu23 default") for examples of changes to prepare the testsuite
to work with a -std=gnu23 default.  In most cases, adding
-Wno-old-style-definition (for warnings for old-style function
definitions) or -std=gnu17 (for other issues such as unprototyped
function declarations with ()) is appropriate, but watch out for cases
that indicate bugs with -std=gnu23 (in particular, any ICEs - there
was only the one nested function test where I had to fix an ICE on
x86_64).

gcc/
* doc/invoke.texi (-std=gnu17, -std=gnu23): Document -std=gnu23 as
default for C code.

gcc/c-family/
* c-opts.cc (c_common_init_options): Default to C23.

gcc/testsuite/
* c-c++-common/analyzer/asm-x86-dyndbg-2.c,
c-c++-common/analyzer/asm-x86-lp64-2.c,
c-c++-common/analyzer/attr-malloc-CVE-2019-19078-usb-leak.c,
c-c++-common/analyzer/coreutils-cksum-pr108664.c,
c-c++-common/analyzer/feasibility-3.c,
c-c++-common/analyzer/pr105783.c, c-c++-common/analyzer/sock-1.c,
c-c++-common/attributes-4.c, gcc.dg/Warray-bounds-78.c,
gcc.dg/analyzer/asm-x86-dyndbg-1.c: Do not define bool, true or
false.
* gcc.dg/debug/ctf/ctf-function-pointers-2.c: Use -std-gnu17.
* gcc.dg/gnu23-version-2.c: New test.
* gcc.dg/simulate-thread/atomic-load-int.c,
gcc.dg/simulate-thread/atomic-load-longlong.c,
gcc.dg/simulate-thread/atomic-load-short.c: Add more noinline
attributes.
* gcc.dg/torture/pr117496-1.c: Use -std=gnu17.

18 files changed:
gcc/c-family/c-opts.cc
gcc/doc/invoke.texi
gcc/testsuite/c-c++-common/analyzer/asm-x86-dyndbg-2.c
gcc/testsuite/c-c++-common/analyzer/asm-x86-lp64-2.c
gcc/testsuite/c-c++-common/analyzer/attr-malloc-CVE-2019-19078-usb-leak.c
gcc/testsuite/c-c++-common/analyzer/coreutils-cksum-pr108664.c
gcc/testsuite/c-c++-common/analyzer/feasibility-3.c
gcc/testsuite/c-c++-common/analyzer/pr105783.c
gcc/testsuite/c-c++-common/analyzer/sock-1.c
gcc/testsuite/c-c++-common/attributes-4.c
gcc/testsuite/gcc.dg/Warray-bounds-78.c
gcc/testsuite/gcc.dg/analyzer/asm-x86-dyndbg-1.c
gcc/testsuite/gcc.dg/debug/ctf/ctf-function-pointers-2.c
gcc/testsuite/gcc.dg/gnu23-version-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/simulate-thread/atomic-load-int.c
gcc/testsuite/gcc.dg/simulate-thread/atomic-load-longlong.c
gcc/testsuite/gcc.dg/simulate-thread/atomic-load-short.c
gcc/testsuite/gcc.dg/torture/pr117496-1.c

index 127f9553e0c087c57aa12048f1a40702b0318e7a..3f2cabf9448f8e631bc57c36927229b9e60f4c41 100644 (file)
@@ -261,8 +261,8 @@ c_common_init_options (unsigned int decoded_options_count,
 
   if (c_language == clk_c)
     {
-      /* The default for C is gnu17.  */
-      set_std_c17 (false /* ISO */);
+      /* The default for C is gnu23.  */
+      set_std_c23 (false /* ISO */);
 
       /* If preprocessing assembly language, accept any of the C-family
         front end options since the driver may pass them through.  */
index 36d79d1c76bfbf9ce3b5073260eed559a96b423e..929feaf23fbbdad5866ebc62effd69c165e0504c 100644 (file)
@@ -2501,11 +2501,12 @@ The name @samp{gnu1x} is deprecated.
 
 @item gnu17
 @itemx gnu18
-GNU dialect of ISO C17.  This is the default for C code.
+GNU dialect of ISO C17.
 
 @item gnu23
 @itemx gnu2x
-GNU dialect of ISO C23.  The name @samp{gnu2x} is deprecated.
+GNU dialect of ISO C23.  This is the default for C code.  The name
+@samp{gnu2x} is deprecated.
 
 @item gnu2y
 The next version of the ISO C standard, still under development, plus
index d5e748c9acd7334df3474a6c9a3f35ce5223e1e5..db77ce9a4f96ba724b17fcd696bab61de5f5fbaa 100644 (file)
@@ -8,12 +8,6 @@
 /* Adapted from various files in the Linux kernel, all of which have:  */
 /* SPDX-License-Identifier: GPL-2.0 */
 
-#ifndef __cplusplus 
-  typedef _Bool bool;
-  #define true 1
-  #define false 0
-#endif
-
 typedef struct {} atomic_t;
 
 /* Adapted from include/linux/compiler_attributes.h  */
index 37c487a69c267f6ba1fec3ee1cc8a7911ddb42d3..5d32c9a66c3ce6afe86574457f12da5d8a53b5b3 100644 (file)
@@ -3,10 +3,6 @@
 
 /* Adapted from Linux x86: page_ref_dec_and_test.c (GPL-2.0).  */
 
-#ifndef __cplusplus 
-  typedef _Bool bool;
-#endif
-
 typedef struct {
   int counter;
 } atomic_t;
index 24fb46bd5a9bf11f8bf44c2881336141613ca732..87ad42a3c3286b28e4712de92d4af089412cedc3 100644 (file)
@@ -4,10 +4,6 @@
 typedef unsigned char u8;
 typedef unsigned short u16;
 
-#ifndef __cplusplus 
-  typedef _Bool bool;
-#endif
-
 #define        ENOMEM          12
 #define        EINVAL          22
 
index 7ae4e6b06bea96842957c4922674af2f5510c766..67dcbce09d045417b288e82a5d65d98d4b3f602d 100644 (file)
@@ -8,10 +8,6 @@ typedef unsigned int __uint32_t;
 typedef unsigned long int __uintmax_t;
 typedef struct _IO_FILE FILE;
 
-#ifndef __cplusplus
-  typedef _Bool bool;
-#endif
-
 extern size_t
 fread_unlocked(void* __restrict __ptr,
                size_t __size,
index 06194f85069cec2a838a5b38f5b4cf5308e4cba3..06aed88b5e8d37e1d536ae54a228f260e6295115 100644 (file)
@@ -6,9 +6,6 @@
 /* Types.  */
 
 typedef unsigned char u8;
-#ifndef __cplusplus
-typedef _Bool bool;
-#endif
 typedef unsigned int gfp_t;
 
 struct file;
index f17519415cef4365a5314c49722e9fc29b35788a..34d21c62aef3cfa1817bfc3a351c6afeb3c12b6d 100644 (file)
@@ -1,9 +1,5 @@
 /* { dg-additional-options "-O" } */
 
-#ifndef __cplusplus
-typedef _Bool bool;
-#endif
-
 struct ss_s {
     union out_or_counting_u {
        char *newstr;
index e5e2f23bba0c74f2ad9507058a00f00a9f4f5d32..57938c0c0ab3a90c8bf4a7996378dd7f8dd6a576 100644 (file)
@@ -5,9 +5,6 @@ typedef __u32 u32;
 typedef __s64 s64;
 typedef __u64 u64;
 typedef long long __kernel_time64_t;
-#ifndef __cplusplus
-typedef _Bool bool;
-#endif
 typedef __s64 time64_t;
 struct __kernel_timespec {
  __kernel_time64_t tv_sec;
index 55661eb792c934773e8ee11689ca30a3fc12bcad..d78cdae2e114cd6ef45a66a4abf1c2b12f00c20f 100644 (file)
@@ -11,7 +11,6 @@
 typedef __CHAR16_TYPE__ char16_t;
 typedef __CHAR32_TYPE__ char32_t;
 #elif !__cplusplus
-typedef _Bool           bool;
 typedef __CHAR16_TYPE__ char16_t;
 typedef __CHAR32_TYPE__ char32_t;
 typedef __WCHAR_TYPE__  wchar_t;
index 73c335fd8a6bac83e2c9aa6c70894c1d429bd511..26b8a9bf9feb171a482a8059707f42309c71cc35 100644 (file)
@@ -3,8 +3,6 @@
    { dg-do compile }
    { dg-options "-O2 -Wall -Wno-strict-aliasing" } */
 
-typedef _Bool bool;
-
 #define NOIPA __attribute__ ((noipa))
 
 struct S { };
index cce3f6b80bcdd5fea8b6e7b0586915b1c2bdf199..9ea86206fd8070c6d42581ffc0b2d8151a50e120 100644 (file)
@@ -8,10 +8,6 @@
 /* Adapted from various files in the Linux kernel, all of which have:  */
 /* SPDX-License-Identifier: GPL-2.0 */
 
-typedef _Bool                  bool;
-#define true 1
-#define false 0
-
 typedef struct {
        int counter;
 } atomic_t;
index 80b9c188ceed547c8431d477d84237bb8103159a..55c73873a84d47f5b3646060fc6a6075a98b0d41 100644 (file)
@@ -4,7 +4,7 @@
    different function pointer types.  */
 
 /* { dg-do compile } */
-/* { dg-options "-O0 -gctf -dA" } */
+/* { dg-options "-O0 -gctf -dA -std=gnu17" } */
 /* { dg-final { scan-assembler-times "\[\t \]0x16000001\[\t \]+\[^\n\]*ctt_info" 1 } } */
 /* { dg-final { scan-assembler-times "ascii \"rcu_callback_t.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */
 /* { dg-final { scan-assembler-times "ascii \"func.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */
diff --git a/gcc/testsuite/gcc.dg/gnu23-version-2.c b/gcc/testsuite/gcc.dg/gnu23-version-2.c
new file mode 100644 (file)
index 0000000..008f445
--- /dev/null
@@ -0,0 +1,11 @@
+/* Test __STDC_VERSION__ for C23 with GNU extensions.  Test that -std=gnu23 is
+   the default (replace this test when updating the default to a later version
+   than gnu23).  */
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+#if __STDC_VERSION__ == 202311L
+int i;
+#else
+#error "Bad __STDC_VERSION__."
+#endif
index a40c3ddcb3108f078a7a0a8d8920b27650b1f6ac..9f75cedd0230eb4770b3dc5f7ae6dc4207788149 100644 (file)
@@ -49,6 +49,7 @@ unsigned int table[16] = {
 int table_cycle_size = 16;
 
 /* Return 0 if 'result' is a valid value to have loaded.  */
+__attribute__((noinline))
 int verify_result ()
 {
   int x;
@@ -69,6 +70,7 @@ int verify_result ()
 }
 
 /* Iterate VALUE through the different valid values. */
+__attribute__((noinline))
 void simulate_thread_other_threads ()
 {
   static int current = 0;
@@ -78,11 +80,13 @@ void simulate_thread_other_threads ()
   value = table[current];
 }
 
+__attribute__((noinline))
 int simulate_thread_step_verify ()
 {
   return verify_result ();
 }
 
+__attribute__((noinline))
 int simulate_thread_final_verify ()
 {
   return verify_result ();
index 524b9845b910396f55c29740d1546ce03e543812..6c3b3a3981f894a5d7c5ddbbdc08afc799bc15e1 100644 (file)
@@ -51,6 +51,7 @@ unsigned long long table[16] = {
 int table_cycle_size = 16;
 
 /* Return 0 if 'result' is a valid value to have loaded.  */
+__attribute__((noinline))
 int verify_result ()
 {
   int x;
@@ -71,6 +72,7 @@ int verify_result ()
 }
 
 /* Iterate VALUE through the different valid values. */
+__attribute__((noinline))
 void simulate_thread_other_threads ()
 {
   static int current = 0;
@@ -80,11 +82,13 @@ void simulate_thread_other_threads ()
   value = table[current];
 }
 
+__attribute__((noinline))
 int simulate_thread_step_verify ()
 {
   return verify_result ();
 }
 
+__attribute__((noinline))
 int simulate_thread_final_verify ()
 {
   return verify_result ();
index 62690cea5f88280ab3ccf77cfbde68682dfdcae3..53b8c084eb3949af317c3399c644302b3809de18 100644 (file)
@@ -49,6 +49,7 @@ unsigned short table[16] = {
 int table_cycle_size = 16;
 
 /* Return 0 if 'result' is a valid value to have loaded.  */
+__attribute__((noinline))
 int verify_result ()
 {
   int x;
@@ -69,6 +70,7 @@ int verify_result ()
 }
 
 /* Iterate VALUE through the different valid values. */
+__attribute__((noinline))
 void simulate_thread_other_threads ()
 {
   static int current = 0;
@@ -78,11 +80,13 @@ void simulate_thread_other_threads ()
   value = table[current];
 }
 
+__attribute__((noinline))
 int simulate_thread_step_verify ()
 {
   return verify_result ();
 }
 
+__attribute__((noinline))
 int simulate_thread_final_verify ()
 {
   return verify_result ();
index f35d13dfa85daee5125c0dd75ad74baa1b356a6a..d68286ef7721a4bdf209645f6127321750513c72 100644 (file)
@@ -1,4 +1,5 @@
 /* { dg-do compile } */
+/* { dg-additional-options "-std=gnu17" } */
 
 
 /* PR tree-optimization/117496 */