File tree Expand file tree Collapse file tree 1 file changed +22
-0
lines changed Expand file tree Collapse file tree 1 file changed +22
-0
lines changed Original file line number Diff line number Diff line change 81
81
#define __is_constexpr (x ) \
82
82
(sizeof(int) == sizeof(*(8 ? ((void *)((long)(x) * 0l)) : (int *)8)))
83
83
84
+ /*
85
+ * Similar to statically_true() but produces a constant expression
86
+ *
87
+ * To be used in conjunction with macros, such as BUILD_BUG_ON_ZERO(),
88
+ * which require their input to be a constant expression and for which
89
+ * statically_true() would otherwise fail.
90
+ *
91
+ * This is a trade-off: const_true() requires all its operands to be
92
+ * compile time constants. Else, it would always returns false even on
93
+ * the most trivial cases like:
94
+ *
95
+ * true || non_const_var
96
+ *
97
+ * On the opposite, statically_true() is able to fold more complex
98
+ * tautologies and will return true on expressions such as:
99
+ *
100
+ * !(non_const_var * 8 % 4)
101
+ *
102
+ * For the general case, statically_true() is better.
103
+ */
104
+ #define const_true (x ) __builtin_choose_expr(__is_constexpr(x), x, false)
105
+
84
106
#ifdef __ANDROID__
85
107
/*
86
108
* FIXME: Big hammer to get rid of tons of:
You can’t perform that action at this time.
0 commit comments