Line data Source code
1 : /* SPDX-License-Identifier: LGPL-2.1+ */ 2 : 3 : #include <sched.h> 4 : #include <stdio.h> 5 : #include <string.h> 6 : 7 : #define __STDC_WANT_IEC_60559_TYPES_EXT__ 8 : #include <float.h> 9 : 10 : #include "time-util.h" 11 : 12 : /* Print information about various types. Useful when diagnosing 13 : * gcc diagnostics on an unfamiliar architecture. */ 14 : 15 : #pragma GCC diagnostic ignored "-Wtype-limits" 16 : 17 : #define info(t) \ 18 : printf("%s → %zu bits%s, %zu byte alignment\n", STRINGIFY(t), \ 19 : sizeof(t)*CHAR_BIT, \ 20 : strstr(STRINGIFY(t), "signed") ? "" : \ 21 : (t)-1 < (t)0 ? ", signed" : ", unsigned", \ 22 : __alignof__(t)) 23 : 24 : enum Enum { 25 : enum_value, 26 : }; 27 : 28 : enum BigEnum { 29 : big_enum_value = UINT64_C(1), 30 : }; 31 : 32 : enum BigEnum2 { 33 : big_enum2_pos = UINT64_C(1), 34 : big_enum2_neg = UINT64_C(-1), 35 : }; 36 : 37 1 : int main(void) { 38 1 : info(char); 39 1 : info(signed char); 40 1 : info(unsigned char); 41 1 : info(short unsigned); 42 1 : info(unsigned); 43 1 : info(long unsigned); 44 1 : info(long long unsigned); 45 1 : info(__syscall_ulong_t); 46 1 : info(__syscall_slong_t); 47 : 48 1 : info(float); 49 1 : info(double); 50 1 : info(long double); 51 : 52 : #ifdef FLT128_MAX 53 1 : info(_Float128); 54 1 : info(_Float64); 55 1 : info(_Float64x); 56 1 : info(_Float32); 57 1 : info(_Float32x); 58 : #endif 59 : 60 1 : info(size_t); 61 1 : info(ssize_t); 62 1 : info(time_t); 63 1 : info(usec_t); 64 1 : info(__time_t); 65 1 : info(pid_t); 66 1 : info(uid_t); 67 1 : info(gid_t); 68 : 69 1 : info(__cpu_mask); 70 : 71 1 : info(enum Enum); 72 1 : info(enum BigEnum); 73 1 : info(enum BigEnum2); 74 : assert_cc(sizeof(enum BigEnum2) == 8); 75 1 : printf("big_enum2_pos → %zu\n", sizeof(big_enum2_pos)); 76 1 : printf("big_enum2_neg → %zu\n", sizeof(big_enum2_neg)); 77 : 78 1 : return 0; 79 : }