#include <stdio.h>
#ifdef NDEBUG
-# define ASSERT(expr) ((void)0)
+# if defined(__clang__) || (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
+# define ASSERT(expr) __builtin_unreachable()
+# else
+# define ASSERT(expr) ((void)0)
+# endif
#else /* NDEBUG */
-# define ASSERT(expr) define ASSERT(expr) ((expr) ? 0 : icinga_assert_fail(#expr, __FILE__, __LINE__))
+# define ASSERT(expr) ((expr) ? 0 : icinga_assert_fail(#expr, __FILE__, __LINE__))
#endif /* NDEBUG */
#define VERIFY(expr) ((expr) ? 0 : icinga_assert_fail(#expr, __FILE__, __LINE__))
-inline void icinga_assert_fail(const char *expr, const char *file, int line)
+int icinga_assert_fail(const char *expr, const char *file, int line) __attribute__((noreturn));
+
+inline int icinga_assert_fail(const char *expr, const char *file, int line)
{
fprintf(stderr, "%s:%d: assertion failed: %s\n", file, line, expr);
abort();
#define OBJECT_H
#include "base/i2-base.h"
+#include "base/debug.h"
#include <boost/thread/thread.hpp>
#ifndef _DEBUG
#include <boost/thread/mutex.hpp>
#else /* _DEBUG */
-#include "base/utility.h"
#include <boost/thread/recursive_mutex.hpp>
#endif /* _DEBUG */