]> git.ipfire.org Git - thirdparty/systemd.git/blobdiff - src/test/test-sizeof.c
Merge pull request #20303 from andir/sysconfig-example
[thirdparty/systemd.git] / src / test / test-sizeof.c
index b948db35a6e125ec614f3e6969180fdc527b578e..e36bee4e8f97dbe5294956dce887d3e16cb99ca2 100644 (file)
@@ -1,20 +1,32 @@
-/* SPDX-License-Identifier: LGPL-2.1+ */
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include <sched.h>
 #include <stdio.h>
 #include <string.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+
+#define __STDC_WANT_IEC_60559_TYPES_EXT__
+#include <float.h>
 
 #include "time-util.h"
 
 /* Print information about various types. Useful when diagnosing
  * gcc diagnostics on an unfamiliar architecture. */
 
-#pragma GCC diagnostic ignored "-Wtype-limits"
+DISABLE_WARNING_TYPE_LIMITS;
+
+#define info_no_sign(t)                                                 \
+        printf("%s → %zu bits, %zu byte alignment\n", STRINGIFY(t),     \
+               sizeof(t)*CHAR_BIT,                                      \
+               __alignof__(t))
 
-#define info(t)                                                 \
-        printf("%s → %zu bits%s\n", STRINGIFY(t),               \
-               sizeof(t)*CHAR_BIT,                              \
-               strstr(STRINGIFY(t), "signed") ? "" :            \
-               ((t)-1 < (t)0 ? ", signed" : ", unsigned"));
+#define info(t)                                                         \
+        printf("%s → %zu bits%s, %zu byte alignment\n", STRINGIFY(t),   \
+               sizeof(t)*CHAR_BIT,                                      \
+               strstr(STRINGIFY(t), "signed") ? "" :                    \
+               (t)-1 < (t)0 ? ", signed" : ", unsigned",                \
+               __alignof__(t))
 
 enum Enum {
         enum_value,
@@ -30,6 +42,12 @@ enum BigEnum2 {
 };
 
 int main(void) {
+        int (*function_pointer)(void);
+
+        info_no_sign(function_pointer);
+        info_no_sign(void*);
+        info(char*);
+
         info(char);
         info(signed char);
         info(unsigned char);
@@ -44,7 +62,7 @@ int main(void) {
         info(double);
         info(long double);
 
-#ifdef __HAVE_DISTINCT_FLOAT128X
+#ifdef FLT128_MAX
         info(_Float128);
         info(_Float64);
         info(_Float64x);
@@ -60,6 +78,9 @@ int main(void) {
         info(pid_t);
         info(uid_t);
         info(gid_t);
+        info(socklen_t);
+
+        info(__cpu_mask);
 
         info(enum Enum);
         info(enum BigEnum);
@@ -68,5 +89,7 @@ int main(void) {
         printf("big_enum2_pos → %zu\n", sizeof(big_enum2_pos));
         printf("big_enum2_neg → %zu\n", sizeof(big_enum2_neg));
 
+        printf("timeval: %zu\n", sizeof(struct timeval));
+        printf("timespec: %zu\n", sizeof(struct timespec));
         return 0;
 }