[gcc r16-9281] c: Use bool rather than _Bool in debug info and diagnostics for C23 and later [PR125935]

Jakub Jelinek via Gcc-cvs <[email protected]>
Newsgroups gmane.comp.gcc.cvs
Message-ID <[email protected]>
https://gcc.gnu.org/g:b61337015f9c67523250ca900139f958269840a8

commit r16-9281-gb61337015f9c67523250ca900139f958269840a8
Author: Jakub Jelinek <[email protected]>
Date:   Tue Jun 30 09:24:56 2026 +0200

    c: Use bool rather than _Bool in debug info and diagnostics for C23 and later [PR125935]
    
    In C23, the primary boolean spelling is bool rather than _Bool, which is
    just a backward compatibility thing.
    So, we shouldn't spell the type as _Bool in debug info (and in diagnostics)
    but as bool.
    Obviously, for C17 and earlier it should be _Bool.
    
    The following patch does that.
    
    2026-06-30  Jakub Jelinek  <[email protected]>
    
            PR c/125935
            * c-decl.cc (c_init_decl_processing): Use "bool" rather than "_Bool"
            as the name of boolean_type_node for C23+.
    
            * gcc.dg/debug/dwarf2/pr125935-1.c: New test.
            * gcc.dg/debug/dwarf2/pr125935-2.c: New test.
            * gcc.dg/debug/dwarf2/pr125935-3.c: New test.
            * gcc.dg/debug/ctf/ctf-bitfields-3.c: Expect bool rather than _Bool.
            * gcc.dg/Warray-bounds-65.c: Expect bool in diagnostics instead of
            _Bool.
            * gcc.dg/Wbad-function-cast-1.c: Likewise.
    
    Reviewed-by: Jeffrey Law <[email protected]>
    (cherry picked from commit 510c4a8167db0e021aa4dd381e1dd1dae8412054)

Diff:
---
 gcc/c/c-decl.cc                                  |  3 +-
 gcc/testsuite/gcc.dg/Warray-bounds-65.c          | 38 ++++++++++++------------
 gcc/testsuite/gcc.dg/Wbad-function-cast-1.c      |  4 +--
 gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-3.c |  2 +-
 gcc/testsuite/gcc.dg/debug/dwarf2/pr125935-1.c   |  8 +++++
 gcc/testsuite/gcc.dg/debug/dwarf2/pr125935-2.c   |  8 +++++
 gcc/testsuite/gcc.dg/debug/dwarf2/pr125935-3.c   |  8 +++++
 7 files changed, 48 insertions(+), 23 deletions(-)

diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc
index 98765710e090..2929db0e7fe3 100644
--- a/gcc/c/c-decl.cc
+++ b/gcc/c/c-decl.cc
@@ -4953,7 +4953,8 @@ c_init_decl_processing (void)
   truthvalue_false_node = integer_zero_node;
 
   /* Even in C99, which has a real boolean type.  */
-  pushdecl (build_decl (UNKNOWN_LOCATION, TYPE_DECL, get_identifier ("_Bool"),
+  pushdecl (build_decl (UNKNOWN_LOCATION, TYPE_DECL,
+			get_identifier (flag_isoc23 ? "bool" : "_Bool"),
 			boolean_type_node));
 
   /* C-specific nullptr initialization.  */
diff --git a/gcc/testsuite/gcc.dg/Warray-bounds-65.c b/gcc/testsuite/gcc.dg/Warray-bounds-65.c
index 6bd50d0f8764..46180f15387a 100644
--- a/gcc/testsuite/gcc.dg/Warray-bounds-65.c
+++ b/gcc/testsuite/gcc.dg/Warray-bounds-65.c
@@ -31,11 +31,11 @@ test_note (int (*pia3)[3])    // { dg-message "while referencing 'pia3'" }
 void test_a1_cst (_Bool (*pba0)[0], char (*pca1)[1],
 		  short (*psa2)[2], int (*pia3)[3])
 {
-  T ((*pba0)[-1]);            // { dg-warning "array subscript -1 is (above|outside) array bounds of '_Bool\\\[0]'" }
-  T ((*pba0)[0]);             // { dg-warning "array subscript 0 is (above|outside) array bounds of '_Bool\\\[0]'" }
-  T ((*pba0)[1]);             // { dg-warning "array subscript 1 is (above|outside) array bounds of '_Bool\\\[0]'" }
-  T ((*pba0)[2]);             // { dg-warning "array subscript 2 is (above|outside) array bounds of '_Bool\\\[0]'" }
-  T ((*pba0)[12]);            // { dg-warning "array subscript 12 is (above|outside) array bounds of '_Bool\\\[0]'" }
+  T ((*pba0)[-1]);            // { dg-warning "array subscript -1 is (above|outside) array bounds of 'bool\\\[0]'" }
+  T ((*pba0)[0]);             // { dg-warning "array subscript 0 is (above|outside) array bounds of 'bool\\\[0]'" }
+  T ((*pba0)[1]);             // { dg-warning "array subscript 1 is (above|outside) array bounds of 'bool\\\[0]'" }
+  T ((*pba0)[2]);             // { dg-warning "array subscript 2 is (above|outside) array bounds of 'bool\\\[0]'" }
+  T ((*pba0)[12]);            // { dg-warning "array subscript 12 is (above|outside) array bounds of 'bool\\\[0]'" }
 
   T ((*pca1)[-1]);            // { dg-warning "array subscript -1 is (below|outside) array bounds of 'char\\\[1]'" }
   T ((*pca1)[0]);
@@ -61,20 +61,20 @@ void test_a1_cst (_Bool (*pba0)[0], char (*pca1)[1],
 void test_a2_cst (_Bool (*pba0_1)[0][1], char (*pca1_2)[1][2],
 		  short (*psa2_3)[2][3], int (*pia3_4)[3][4])
 {
-  T ((*pba0_1)[-1][-1]);        // { dg-warning "array subscript -1 is (below|outside) array bounds of '_Bool\\\[1]'" }
-  T ((*pba0_1)[-1][0]);         // { dg-warning "array subscript -1 is (above|outside) array bounds of '_Bool\\\[0]\\\[1]'" }
-
-  T ((*pba0_1)[0][-1]);         // { dg-warning "array subscript -1 is (below|outside) array bounds of '_Bool\\\[1]'" }
-  T ((*pba0_1)[0][0]);          // { dg-warning "array subscript 0 is (above|outside) array bounds of '_Bool\\\[0]\\\[1]'" }
-  T ((*pba0_1)[0][1]);          // { dg-warning "array subscript 1 is (above|outside) array bounds of '_Bool\\\[1]'" }
-  T ((*pba0_1)[0][2]);          // { dg-warning "array subscript 2 is (above|outside) array bounds of '_Bool\\\[1]'" }
-  T ((*pba0_1)[0][12]);         // { dg-warning "array subscript 12 is (above|outside) array bounds of '_Bool\\\[1]'" }
-
-  T ((*pba0_1)[1][-1]);         // { dg-warning "array subscript -1 is (below|outside) array bounds of '_Bool\\\[1]'" }
-  T ((*pba0_1)[1][0]);          // { dg-warning "array subscript 1 is (above|outside) array bounds of '_Bool\\\[0]\\\[1]'" }
-  T ((*pba0_1)[1][1]);          // { dg-warning "array subscript 1 is (above|outside) array bounds of '_Bool\\\[1]'" }
-  T ((*pba0_1)[1][2]);          // { dg-warning "array subscript 2 is (above|outside) array bounds of '_Bool\\\[1]'" }
-  T ((*pba0_1)[1][12]);         // { dg-warning "array subscript 12 is (above|outside) array bounds of '_Bool\\\[1]'" }
+  T ((*pba0_1)[-1][-1]);        // { dg-warning "array subscript -1 is (below|outside) array bounds of 'bool\\\[1]'" }
+  T ((*pba0_1)[-1][0]);         // { dg-warning "array subscript -1 is (above|outside) array bounds of 'bool\\\[0]\\\[1]'" }
+
+  T ((*pba0_1)[0][-1]);         // { dg-warning "array subscript -1 is (below|outside) array bounds of 'bool\\\[1]'" }
+  T ((*pba0_1)[0][0]);          // { dg-warning "array subscript 0 is (above|outside) array bounds of 'bool\\\[0]\\\[1]'" }
+  T ((*pba0_1)[0][1]);          // { dg-warning "array subscript 1 is (above|outside) array bounds of 'bool\\\[1]'" }
+  T ((*pba0_1)[0][2]);          // { dg-warning "array subscript 2 is (above|outside) array bounds of 'bool\\\[1]'" }
+  T ((*pba0_1)[0][12]);         // { dg-warning "array subscript 12 is (above|outside) array bounds of 'bool\\\[1]'" }
+
+  T ((*pba0_1)[1][-1]);         // { dg-warning "array subscript -1 is (below|outside) array bounds of 'bool\\\[1]'" }
+  T ((*pba0_1)[1][0]);          // { dg-warning "array subscript 1 is (above|outside) array bounds of 'bool\\\[0]\\\[1]'" }
+  T ((*pba0_1)[1][1]);          // { dg-warning "array subscript 1 is (above|outside) array bounds of 'bool\\\[1]'" }
+  T ((*pba0_1)[1][2]);          // { dg-warning "array subscript 2 is (above|outside) array bounds of 'bool\\\[1]'" }
+  T ((*pba0_1)[1][12]);         // { dg-warning "array subscript 12 is (above|outside) array bounds of 'bool\\\[1]'" }
 
 
   T ((*pca1_2)[0][0]);
diff --git a/gcc/testsuite/gcc.dg/Wbad-function-cast-1.c b/gcc/testsuite/gcc.dg/Wbad-function-cast-1.c
index 4a0547f0b529..9e0bcaf684f4 100644
--- a/gcc/testsuite/gcc.dg/Wbad-function-cast-1.c
+++ b/gcc/testsuite/gcc.dg/Wbad-function-cast-1.c
@@ -40,12 +40,12 @@ foo(void)
      types.  */
   (float)if1(); /* { dg-warning "cast from function call of type 'int' to non-matching type 'float'" } */
   (double)if2(); /* { dg-warning "cast from function call of type 'char' to non-matching type 'double'" } */
-  (_Bool)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type '_Bool'" } */
+  (_Bool)if3(); /* { dg-warning "cast from function call of type 'long int' to non-matching type 'bool'" } */
   (int)rf1(); /* { dg-warning "cast from function call of type 'float' to non-matching type 'int'" } */
   (long)rf2(); /* { dg-warning "cast from function call of type 'double' to non-matching type 'long int'" } */
   (double)cf(); /* { dg-warning "cast from function call of type 'complex double' to non-matching type 'double'" } */
   (int)ef(); /* { dg-warning "cast from function call of type 'enum e' to non-matching type 'int'" } */
-  (int)bf(); /* { dg-warning "cast from function call of type '_Bool' to non-matching type 'int'" } */
+  (int)bf(); /* { dg-warning "cast from function call of type 'bool' to non-matching type 'int'" } */
   (__SIZE_TYPE__)pf1(); /* { dg-warning "cast from function call of type 'char \\*' to non-matching type '\[^\\n\]*'" } */
   (__PTRDIFF_TYPE__)pf2(); /* { dg-warning "cast from function call of type 'int \\*' to non-matching type '\[^\\n\]*'" } */
 }
diff --git a/gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-3.c b/gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-3.c
index 411040db88fd..5d989f26966a 100644
--- a/gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-3.c
+++ b/gcc/testsuite/gcc.dg/debug/ctf/ctf-bitfields-3.c
@@ -6,7 +6,7 @@
 /* { dg-final { scan-assembler-times "\[\t \]0x2\[\t \]+\[^\n\]*cts_type" 2 } } */
 /* { dg-final { scan-assembler-times "\[\t \]0x1\[\t \]+\[^\n\]*cts_bits" 2 } } */
 
-/* { dg-final { scan-assembler-times "ascii \"_Bool.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */
+/* { dg-final { scan-assembler-times "ascii \"bool.0\"\[\t \]+\[^\n\]*ctf_string" 1 } } */
 
 #include <stdbool.h>
 
diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr125935-1.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr125935-1.c
new file mode 100644
index 000000000000..2bcb8fb2a83d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr125935-1.c
@@ -0,0 +1,8 @@
+/* PR c/125935 */
+/* { dg-do compile } */
+/* { dg-options "-std=c17 -g -dA" } */
+
+_Bool x;
+
+/* { dg-final { scan-assembler-times "(DW_AT_name: \"_Bool\"|\"_Bool..\"\[^\\r\\n\]*DW_AT_name)" 1 } } */
+/* { dg-final { scan-assembler-not "(DW_AT_name: \"bool\"|\"bool..\"\[^\\r\\n\]*DW_AT_name)" } } */
diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr125935-2.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr125935-2.c
new file mode 100644
index 000000000000..0a8ff39b83f6
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr125935-2.c
@@ -0,0 +1,8 @@
+/* PR c/125935 */
+/* { dg-do compile } */
+/* { dg-options "-std=c23 -g -dA" } */
+
+_Bool x;
+
+/* { dg-final { scan-assembler-not "(DW_AT_name: \"_Bool\"|\"_Bool..\"\[^\\r\\n\]*DW_AT_name)" } } */
+/* { dg-final { scan-assembler-times "(DW_AT_name: \"bool\"|\"bool..\"\[^\\r\\n\]*DW_AT_name)" 1 } } */
diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/pr125935-3.c b/gcc/testsuite/gcc.dg/debug/dwarf2/pr125935-3.c
new file mode 100644
index 000000000000..e8d540e37cc7
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/debug/dwarf2/pr125935-3.c
@@ -0,0 +1,8 @@
+/* PR c/125935 */
+/* { dg-do compile } */
+/* { dg-options "-std=c23 -g -dA" } */
+
+bool x;
+
+/* { dg-final { scan-assembler-not "(DW_AT_name: \"_Bool\"|\"_Bool..\"\[^\\r\\n\]*DW_AT_name)" } } */
+/* { dg-final { scan-assembler-times "(DW_AT_name: \"bool\"|\"bool..\"\[^\\r\\n\]*DW_AT_name)" 1 } } */
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.