Is a noop in normal cases (when compiler sees that the condition can
be evaluated without sideeffects) but allows optimizations based on
the condition.

E.g. in

| void foo(int a)
| {
|     debug_assert(a == 23);
|
|     if (a == 23)
|         return;
|
|     bar();
| }

the call to 'bar()' will be optimized away.

Signed-off-by: Enrico Scholz <enrico.sch...@sigma-chemnitz.de>
---
 fs/tftp.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/fs/tftp.c b/fs/tftp.c
index 51cb1109d2ff..07de8334f202 100644
--- a/fs/tftp.c
+++ b/fs/tftp.c
@@ -70,6 +70,15 @@
 
 #define TFTP_ERR_RESEND        1
 
+#ifdef DEBUG
+#  define debug_assert(_cond)  BUG_ON(!(_cond))
+#else
+#  define debug_assert(_cond) do {                     \
+               if (!(_cond))                           \
+                       __builtin_unreachable();        \
+       } while (0)
+#endif
+
 struct file_priv {
        struct net_connection *tftp_con;
        int push;
-- 
2.37.2


Reply via email to