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