#define _GNU_SOURCE
#endif
+// Teach the compiler that some code path is unreacheable:
+#if defined(__has_builtin)
+ #if __has_builtin(__builtin_unreachable)
+ #define XBT_UNREACHABLE() __builtin_unreachable()
+ #else
+ #include <stdlib.h>
+ #define XBT_UNREACHABLE() abort()
+ #endif
+#elif (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
+ #define XBT_UNREACHABLE() __builtin_unreachable()
+#else
+ #include <stdlib.h>
+ #define XBT_UNREACHABLE() abort()
+#endif
+
/* On MinGW, stdio.h defines __MINGW_PRINTF_FORMAT and __MINGW_SCANF_FORMAT
which are the suitable format style (either gnu_printf or ms_printf)
depending on which version is available (__USE_MINGW_ANSI_STDIO): */
#ifndef __XBT_EX_H__
#define __XBT_EX_H__
+#include <stdlib.h>
+
#include "xbt/sysdep.h"
#include "xbt/misc.h"
#include "xbt/virtu.h"
__xbt_ex_terminate((xbt_ex_t*)&(ctx->exception)); /* not catched */ \
else \
__ex_mctx_restore(ctx->ctx_mctx); /* catched somewhere */ \
- abort(); /* nope, stupid GCC, we won't survive a THROW */ \
- /* (this won't be reached) */ \
+ XBT_UNREACHABLE(); \
} while(0)
/** @brief Helper macro for THROW and THROWF