c: Add C2X BOOL_MAX and BOOL_WIDTH to limits.h
C2X adds BOOL_MAX and BOOL_WIDTH macros to <limits.h>. 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 <limits.h> 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.
This commit is contained in:
parent
ed1d3639e4
commit
b2104239c8
3 changed files with 40 additions and 0 deletions
|
@ -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___ */
|
||||
|
|
13
gcc/testsuite/gcc.dg/c11-bool-limits-1.c
Normal file
13
gcc/testsuite/gcc.dg/c11-bool-limits-1.c
Normal file
|
@ -0,0 +1,13 @@
|
|||
/* Test limits for _Bool not in <limits.h> in C11. */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-std=c11" } */
|
||||
|
||||
#include <limits.h>
|
||||
|
||||
#ifdef BOOL_MAX
|
||||
# error "unexpected BOOL_MAX"
|
||||
#endif
|
||||
|
||||
#ifdef BOOL_WIDTH
|
||||
# error "unexpected BOOL_WIDTH"
|
||||
#endif
|
19
gcc/testsuite/gcc.dg/c2x-bool-limits-1.c
Normal file
19
gcc/testsuite/gcc.dg/c2x-bool-limits-1.c
Normal file
|
@ -0,0 +1,19 @@
|
|||
/* Test limits for _Bool in <limits.h> in C2x. */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-std=c2x" } */
|
||||
|
||||
#include <limits.h>
|
||||
|
||||
#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");
|
Loading…
Add table
Reference in a new issue