summaryrefslogtreecommitdiff
path: root/include/linux/build_bug.h
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2019-03-19 13:12:18 +0000
committerMark Brown <broonie@kernel.org>2019-03-19 13:12:18 +0000
commitc9e48084c88cf901ad0d99a889f2628a5622d90b (patch)
treee95ef2305fa14e0c6e218a6aba8de8df4a0b5798 /include/linux/build_bug.h
parent04d1446bce279ee6e4c39b3bf705bef3abba008e (diff)
parent9e98c678c2d6ae3a17cb2de55d17f69dddaa231b (diff)
Merge tag 'v5.1-rc1' into regulator-5.2
Linux 5.1-rc1
Diffstat (limited to 'include/linux/build_bug.h')
-rw-r--r--include/linux/build_bug.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/include/linux/build_bug.h b/include/linux/build_bug.h
index faeec7433aab..0fe5426f2bdc 100644
--- a/include/linux/build_bug.h
+++ b/include/linux/build_bug.h
@@ -58,4 +58,23 @@
*/
#define BUILD_BUG() BUILD_BUG_ON_MSG(1, "BUILD_BUG failed")
+/**
+ * static_assert - check integer constant expression at build time
+ *
+ * static_assert() is a wrapper for the C11 _Static_assert, with a
+ * little macro magic to make the message optional (defaulting to the
+ * stringification of the tested expression).
+ *
+ * Contrary to BUILD_BUG_ON(), static_assert() can be used at global
+ * scope, but requires the expression to be an integer constant
+ * expression (i.e., it is not enough that __builtin_constant_p() is
+ * true for expr).
+ *
+ * Also note that BUILD_BUG_ON() fails the build if the condition is
+ * true, while static_assert() fails the build if the expression is
+ * false.
+ */
+#define static_assert(expr, ...) __static_assert(expr, ##__VA_ARGS__, #expr)
+#define __static_assert(expr, msg, ...) _Static_assert(expr, msg)
+
#endif /* _LINUX_BUILD_BUG_H */