aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/bug.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/bug.h')
-rw-r--r--include/linux/bug.h28
1 files changed, 13 insertions, 15 deletions
diff --git a/include/linux/bug.h b/include/linux/bug.h
index dc11dc762fc3..7f4818673c41 100644
--- a/include/linux/bug.h
+++ b/include/linux/bug.h
@@ -17,6 +17,7 @@ struct pt_regs;
17#define BUILD_BUG_ON_ZERO(e) (0) 17#define BUILD_BUG_ON_ZERO(e) (0)
18#define BUILD_BUG_ON_NULL(e) ((void*)0) 18#define BUILD_BUG_ON_NULL(e) ((void*)0)
19#define BUILD_BUG_ON_INVALID(e) (0) 19#define BUILD_BUG_ON_INVALID(e) (0)
20#define BUILD_BUG_ON_MSG(cond, msg) (0)
20#define BUILD_BUG_ON(condition) (0) 21#define BUILD_BUG_ON(condition) (0)
21#define BUILD_BUG() (0) 22#define BUILD_BUG() (0)
22#else /* __CHECKER__ */ 23#else /* __CHECKER__ */
@@ -40,6 +41,15 @@ struct pt_regs;
40#define BUILD_BUG_ON_INVALID(e) ((void)(sizeof((__force long)(e)))) 41#define BUILD_BUG_ON_INVALID(e) ((void)(sizeof((__force long)(e))))
41 42
42/** 43/**
44 * BUILD_BUG_ON_MSG - break compile if a condition is true & emit supplied
45 * error message.
46 * @condition: the condition which the compiler should know is false.
47 *
48 * See BUILD_BUG_ON for description.
49 */
50#define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
51
52/**
43 * BUILD_BUG_ON - break compile if a condition is true. 53 * BUILD_BUG_ON - break compile if a condition is true.
44 * @condition: the condition which the compiler should know is false. 54 * @condition: the condition which the compiler should know is false.
45 * 55 *
@@ -60,15 +70,8 @@ struct pt_regs;
60#ifndef __OPTIMIZE__ 70#ifndef __OPTIMIZE__
61#define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)])) 71#define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))
62#else 72#else
63#define BUILD_BUG_ON(condition) \ 73#define BUILD_BUG_ON(condition) \
64 do { \ 74 BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
65 bool __cond = !!(condition); \
66 extern void __build_bug_on_failed(void) \
67 __compiletime_error("BUILD_BUG_ON failed"); \
68 if (__cond) \
69 __build_bug_on_failed(); \
70 __compiletime_error_fallback(__cond); \
71 } while (0)
72#endif 75#endif
73 76
74/** 77/**
@@ -78,12 +81,7 @@ struct pt_regs;
78 * build time, you should use BUILD_BUG to detect if it is 81 * build time, you should use BUILD_BUG to detect if it is
79 * unexpectedly used. 82 * unexpectedly used.
80 */ 83 */
81#define BUILD_BUG() \ 84#define BUILD_BUG() BUILD_BUG_ON_MSG(1, "BUILD_BUG failed")
82 do { \
83 extern void __build_bug_failed(void) \
84 __compiletime_error("BUILD_BUG failed");\
85 __build_bug_failed(); \
86 } while (0)
87 85
88#endif /* __CHECKER__ */ 86#endif /* __CHECKER__ */
89 87