|
@@ -17,6 +17,7 @@ struct pt_regs;
|
|
|
#define BUILD_BUG_ON_ZERO(e) (0)
|
|
|
#define BUILD_BUG_ON_NULL(e) ((void*)0)
|
|
|
#define BUILD_BUG_ON_INVALID(e) (0)
|
|
|
+#define BUILD_BUG_ON_MSG(cond, msg) (0)
|
|
|
#define BUILD_BUG_ON(condition) (0)
|
|
|
#define BUILD_BUG() (0)
|
|
|
#else /* __CHECKER__ */
|
|
@@ -39,6 +40,15 @@ struct pt_regs;
|
|
|
*/
|
|
|
#define BUILD_BUG_ON_INVALID(e) ((void)(sizeof((__force long)(e))))
|
|
|
|
|
|
+/**
|
|
|
+ * BUILD_BUG_ON_MSG - break compile if a condition is true & emit supplied
|
|
|
+ * error message.
|
|
|
+ * @condition: the condition which the compiler should know is false.
|
|
|
+ *
|
|
|
+ * See BUILD_BUG_ON for description.
|
|
|
+ */
|
|
|
+#define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
|
|
|
+
|
|
|
/**
|
|
|
* BUILD_BUG_ON - break compile if a condition is true.
|
|
|
* @condition: the condition which the compiler should know is false.
|
|
@@ -60,15 +70,8 @@ struct pt_regs;
|
|
|
#ifndef __OPTIMIZE__
|
|
|
#define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))
|
|
|
#else
|
|
|
-#define BUILD_BUG_ON(condition) \
|
|
|
- do { \
|
|
|
- bool __cond = !!(condition); \
|
|
|
- extern void __build_bug_on_failed(void) \
|
|
|
- __compiletime_error("BUILD_BUG_ON failed"); \
|
|
|
- if (__cond) \
|
|
|
- __build_bug_on_failed(); \
|
|
|
- __compiletime_error_fallback(__cond); \
|
|
|
- } while (0)
|
|
|
+#define BUILD_BUG_ON(condition) \
|
|
|
+ BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
|
|
|
#endif
|
|
|
|
|
|
/**
|
|
@@ -78,12 +81,7 @@ struct pt_regs;
|
|
|
* build time, you should use BUILD_BUG to detect if it is
|
|
|
* unexpectedly used.
|
|
|
*/
|
|
|
-#define BUILD_BUG() \
|
|
|
- do { \
|
|
|
- extern void __build_bug_failed(void) \
|
|
|
- __compiletime_error("BUILD_BUG failed");\
|
|
|
- __build_bug_failed(); \
|
|
|
- } while (0)
|
|
|
+#define BUILD_BUG() BUILD_BUG_ON_MSG(1, "BUILD_BUG failed")
|
|
|
|
|
|
#endif /* __CHECKER__ */
|
|
|
|