Define `static_assert()` when not defined by kernel
authorFrancis Deslauriers <francis.deslauriers@efficios.com>
Tue, 4 May 2021 19:48:52 +0000 (15:48 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Thu, 6 May 2021 17:51:31 +0000 (13:51 -0400)
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

include/wrapper/compiler.h

index 40a472d6d4ba6ae0bce647ee74de88ff479b5c3a..ade06fe702de4e4133868fb7ece4509b4c0369de 100644 (file)
 
 #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 */
This page took 0.034541 seconds and 4 git commands to generate.