1*c85f09ccSJohn Levon #define BITS(T)		(sizeof(T) * 8)
2*c85f09ccSJohn Levon #define SIGN_BIT(T)	(1ULL << (BITS(T) - 1))
3*c85f09ccSJohn Levon #define SMASK(T)	(SIGN_BIT(T) - 1)
4*c85f09ccSJohn Levon #define UMASK(T)	(SIGN_BIT(T) | SMASK(T))
5*c85f09ccSJohn Levon 
6*c85f09ccSJohn Levon int test(void);
test(void)7*c85f09ccSJohn Levon int test(void)
8*c85f09ccSJohn Levon {
9*c85f09ccSJohn Levon #define TEST_BIT(X, T)	if (__ ## X ## _BIT__  != BITS(T)) return 1
10*c85f09ccSJohn Levon 	TEST_BIT(CHAR, char);
11*c85f09ccSJohn Levon 
12*c85f09ccSJohn Levon #define TEST_MAX(X, M)	if (__ ## X ## _MAX__ != M) return 1
13*c85f09ccSJohn Levon #define TEST_SMAX(X, T)	TEST_MAX(X, SMASK(T))
14*c85f09ccSJohn Levon #define TEST_UMAX(X, T)	TEST_MAX(X, UMASK(T))
15*c85f09ccSJohn Levon 	TEST_SMAX(SCHAR, signed char);
16*c85f09ccSJohn Levon 	TEST_SMAX(SHRT, short);
17*c85f09ccSJohn Levon 	TEST_SMAX(INT, int);
18*c85f09ccSJohn Levon 	TEST_SMAX(LONG, long);
19*c85f09ccSJohn Levon 	TEST_SMAX(LONG_LONG, long long);
20*c85f09ccSJohn Levon 	TEST_MAX( INT8,  0x7f);
21*c85f09ccSJohn Levon 	TEST_MAX(UINT8,  0xffU);
22*c85f09ccSJohn Levon 	TEST_MAX( INT16, 0x7fff);
23*c85f09ccSJohn Levon 	TEST_MAX(UINT16, 0xffffU);
24*c85f09ccSJohn Levon 	TEST_MAX( INT32, 0x7fffffff);
25*c85f09ccSJohn Levon 	TEST_MAX(UINT32, 0xffffffffU);
26*c85f09ccSJohn Levon 	TEST_MAX( INT64, 0x7fffffffffffffffLL);
27*c85f09ccSJohn Levon 	TEST_MAX(UINT64, 0xffffffffffffffffULL);
28*c85f09ccSJohn Levon 	TEST_SMAX(INTMAX, __INTMAX_TYPE__);
29*c85f09ccSJohn Levon 	TEST_UMAX(UINTMAX, __UINTMAX_TYPE__);
30*c85f09ccSJohn Levon 	TEST_SMAX(INTPTR, __INTPTR_TYPE__);
31*c85f09ccSJohn Levon 	TEST_UMAX(UINTPTR, __UINTPTR_TYPE__);
32*c85f09ccSJohn Levon 	TEST_SMAX(PTRDIFF, __PTRDIFF_TYPE__);
33*c85f09ccSJohn Levon 	TEST_UMAX(SIZE, __SIZE_TYPE__);
34*c85f09ccSJohn Levon 
35*c85f09ccSJohn Levon #define TEST_SIZEOF(X, T) if (__SIZEOF_ ## X ## __ != sizeof(T)) return 1
36*c85f09ccSJohn Levon 	TEST_SIZEOF(SHORT, short);
37*c85f09ccSJohn Levon 	TEST_SIZEOF(INT, int);
38*c85f09ccSJohn Levon 	TEST_SIZEOF(LONG, long);
39*c85f09ccSJohn Levon 	TEST_SIZEOF(LONG_LONG, long long);
40*c85f09ccSJohn Levon 	TEST_SIZEOF(INT128, __int128);
41*c85f09ccSJohn Levon 	TEST_SIZEOF(PTRDIFF_T, __PTRDIFF_TYPE__);
42*c85f09ccSJohn Levon 	TEST_SIZEOF(SIZE_T, __SIZE_TYPE__);
43*c85f09ccSJohn Levon 	TEST_SIZEOF(POINTER, void*);
44*c85f09ccSJohn Levon 	TEST_SIZEOF(FLOAT, float);
45*c85f09ccSJohn Levon 	TEST_SIZEOF(DOUBLE, double);
46*c85f09ccSJohn Levon 	TEST_SIZEOF(LONG_DOUBLE, long double);
47*c85f09ccSJohn Levon 
48*c85f09ccSJohn Levon 	return 0;
49*c85f09ccSJohn Levon }
50*c85f09ccSJohn Levon 
51*c85f09ccSJohn Levon /*
52*c85f09ccSJohn Levon  * check-name: predefined macros: __SIZEOF_<type>__, ...
53*c85f09ccSJohn Levon  * check-command: test-linearize -Wno-decl $file
54*c85f09ccSJohn Levon  * check-output-ignore
55*c85f09ccSJohn Levon  *
56*c85f09ccSJohn Levon  * check-output-contains: ret\\..*\\$0
57*c85f09ccSJohn Levon  */
58