This macro is useful for build-time assertions. It was added in kernel
v5.1. It uses the C11 _Static_assert macro that was implemented with gcc
4.6. There is support for the _Static_assert in all C modes, including
gnu89.
Since our minimal gcc version is 4.8, we can simply define it manually
if the kernel is older than v5.1.
Kernel commit adding this macro:
commit
6bab69c65013bed5fce9f101a64a84d0385b3946
Author: Rasmus Villemoes <linux@rasmusvillemoes.dk>
Date: Thu Mar 7 16:27:00 2019 -0800
build_bug.h: add wrapper for _Static_assert
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I5aa250f60f9dca4f13b8bcc093a006034c28e526
#define __LTTNG_COMPOUND_LITERAL(type, ...) (type[]) { __VA_ARGS__ }
+/*
+ * The static_assert macro was defined by the kernel in v5.1.
+ * If the macro is not defined, we define it.
+ * (kernel source: include/linux/build_bug.h)
+ */
+#ifndef static_assert
+
+# define static_assert(expr, ...) __static_assert(expr, ##__VA_ARGS__, #expr)
+# define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
+
+#endif
+
#endif /* _LTTNG_WRAPPER_COMPILER_H */