1 /* Test C23 width macros in <limits.h>. */
2 /* { dg-do compile } */
3 /* { dg-options "-std=c23" } */
7 #define CHECK_WIDTH(TYPE, MAX, WIDTH) \
8 _Static_assert ((MAX >> ((TYPE) -1 < 0 ? (WIDTH - 2) : (WIDTH - 1))) == 1, \
9 "width must match type")
12 # error "missing CHAR_WIDTH"
14 CHECK_WIDTH (char, CHAR_MAX
, CHAR_WIDTH
);
16 # error "missing SCHAR_WIDTH"
18 CHECK_WIDTH (signed char, SCHAR_MAX
, SCHAR_WIDTH
);
20 # error "missing UCHAR_WIDTH"
22 CHECK_WIDTH (unsigned char, UCHAR_MAX
, UCHAR_WIDTH
);
24 # error "missing SHRT_WIDTH"
26 CHECK_WIDTH (signed short, SHRT_MAX
, SHRT_WIDTH
);
28 # error "missing USHRT_WIDTH"
30 CHECK_WIDTH (unsigned short, USHRT_MAX
, USHRT_WIDTH
);
32 # error "missing INT_WIDTH"
34 CHECK_WIDTH (signed int, INT_MAX
, INT_WIDTH
);
36 # error "missing UINT_WIDTH"
38 CHECK_WIDTH (unsigned int, UINT_MAX
, UINT_WIDTH
);
40 # error "missing LONG_WIDTH"
42 CHECK_WIDTH (signed long, LONG_MAX
, LONG_WIDTH
);
44 # error "missing ULONG_WIDTH"
46 CHECK_WIDTH (unsigned long, ULONG_MAX
, ULONG_WIDTH
);
48 # error "missing LLONG_WIDTH"
50 CHECK_WIDTH (signed long long, LLONG_MAX
, LLONG_WIDTH
);
52 # error "missing ULLONG_WIDTH"
54 CHECK_WIDTH (unsigned long long, ULLONG_MAX
, ULLONG_WIDTH
);