commit b457435a8845782708575236f2a7e67537330e6f
parent 18b1972b408b9620e497307d7ce33e86bfbb605e
Author: Christian Grothoff <christian@grothoff.org>
Date: Sat, 20 Dec 2014 00:18:06 +0000
use __buildin_unreachable() after MHD_PANIC() -- if supported by gcc
Diffstat:
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/src/microhttpd/internal.h b/src/microhttpd/internal.h
@@ -75,20 +75,28 @@ extern MHD_PanicCallback mhd_panic;
*/
extern void *mhd_panic_cls;
+/* If we have Clang or gcc >= 4.5, use __buildin_unreachable() */
+#if defined(__clang__) || (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
+#define BUILTIN_NOT_REACHED __builtin_unreachable()
+#else
+#define BUILTIN_NOT_REACHED
+#endif
+
+
#if HAVE_MESSAGES
/**
* Trigger 'panic' action based on fatal errors.
*
* @param msg error message (const char *)
*/
-#define MHD_PANIC(msg) mhd_panic (mhd_panic_cls, __FILE__, __LINE__, msg)
+#define MHD_PANIC(msg) do { mhd_panic (mhd_panic_cls, __FILE__, __LINE__, msg); BUILTIN_NOT_REACHED; } while (0)
#else
/**
* Trigger 'panic' action based on fatal errors.
*
* @param msg error message (const char *)
*/
-#define MHD_PANIC(msg) mhd_panic (mhd_panic_cls, __FILE__, __LINE__, NULL)
+#define MHD_PANIC(msg) do { mhd_panic (mhd_panic_cls, __FILE__, __LINE__, NULL); BUILTIN_NOT_REACHED; } while (0)
#endif