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