From b2104239c8f23ff3463dba64f1c9266896ce4fae Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Fri, 10 Jul 2020 21:35:51 +0000 Subject: [PATCH] c: Add C2X BOOL_MAX and BOOL_WIDTH to limits.h C2X adds BOOL_MAX and BOOL_WIDTH macros to . As GCC only supports values 0 and 1 for _Bool (regardless of the number of bits in the representation, other bits are padding bits and if any of them are nonzero, the representation is a trap representation), the values of those macros can just be hardcoded directly in rather than needing corresponding predefined macros. Bootstrapped with no regressions on x86_64-pc-linux-gnu. gcc/ * glimits.h [__STDC_VERSION__ > 201710L] (BOOL_MAX, BOOL_WIDTH): New macros. gcc/testsuite/ * gcc.dg/c11-bool-limits-1.c, gcc.dg/c2x-bool-limits-1.c: New tests. --- gcc/glimits.h | 8 ++++++++ gcc/testsuite/gcc.dg/c11-bool-limits-1.c | 13 +++++++++++++ gcc/testsuite/gcc.dg/c2x-bool-limits-1.c | 19 +++++++++++++++++++ 3 files changed, 40 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/c11-bool-limits-1.c create mode 100644 gcc/testsuite/gcc.dg/c2x-bool-limits-1.c diff --git a/gcc/glimits.h b/gcc/glimits.h index a37f496..5092751 100644 --- a/gcc/glimits.h +++ b/gcc/glimits.h @@ -150,4 +150,12 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see # define ULLONG_WIDTH __LONG_LONG_WIDTH__ #endif +#if defined (__STDC_VERSION__) && __STDC_VERSION__ > 201710L +/* C2X width and limit of _Bool. */ +# undef BOOL_MAX +# define BOOL_MAX 1 +# undef BOOL_WIDTH +# define BOOL_WIDTH 1 +#endif + #endif /* _LIMITS_H___ */ diff --git a/gcc/testsuite/gcc.dg/c11-bool-limits-1.c b/gcc/testsuite/gcc.dg/c11-bool-limits-1.c new file mode 100644 index 0000000..9ca29be --- /dev/null +++ b/gcc/testsuite/gcc.dg/c11-bool-limits-1.c @@ -0,0 +1,13 @@ +/* Test limits for _Bool not in in C11. */ +/* { dg-do compile } */ +/* { dg-options "-std=c11" } */ + +#include + +#ifdef BOOL_MAX +# error "unexpected BOOL_MAX" +#endif + +#ifdef BOOL_WIDTH +# error "unexpected BOOL_WIDTH" +#endif diff --git a/gcc/testsuite/gcc.dg/c2x-bool-limits-1.c b/gcc/testsuite/gcc.dg/c2x-bool-limits-1.c new file mode 100644 index 0000000..d32b4ef --- /dev/null +++ b/gcc/testsuite/gcc.dg/c2x-bool-limits-1.c @@ -0,0 +1,19 @@ +/* Test limits for _Bool in in C2x. */ +/* { dg-do compile } */ +/* { dg-options "-std=c2x" } */ + +#include + +#ifndef BOOL_MAX +# error "missing BOOL_MAX" +#endif + +#ifndef BOOL_WIDTH +# error "missing BOOL_WIDTH" +#endif + +/* In principle _Bool can support values wider than 1 bit, stored via + type punning, but this is not supported by GCC. */ + +_Static_assert (BOOL_MAX == 1, "bad BOOL_MAX"); +_Static_assert (BOOL_WIDTH == 1, "bad BOOL_WIDTH"); -- 2.7.4