refactor test for __builtin_unreachable into Rts.h macro RTS_UNREACHABLE
authorKarel Gardas <karel.gardas@centrum.cz>
Mon, 15 Aug 2016 20:26:04 +0000 (22:26 +0200)
committerKarel Gardas <karel.gardas@centrum.cz>
Mon, 15 Aug 2016 20:26:04 +0000 (22:26 +0200)
Summary:
This patch refactors GNU C version test (for 4.5 and more modern)
due to usage of __builtin_unreachable done in the CNF.c code directly
into the new RTS_UNREACHABLE macro placed into Rts.h

Reviewers: bgamari, austin, simonmar, erikd

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D2457

includes/Rts.h
rts/sm/CNF.c

index 3d4538f..be81b0d 100644 (file)
@@ -61,6 +61,13 @@ extern "C" {
 #define RTS_UNLIKELY(p) p
 #endif
 
+/* __builtin_unreachable is supported since GNU C 4.5 */
+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
+#define RTS_UNREACHABLE __builtin_unreachable()
+#else
+#define RTS_UNREACHABLE abort()
+#endif
+
 /* Fix for mingw stat problem (done here so it's early enough) */
 #ifdef mingw32_HOST_OS
 #define __MSVCRT__ 1
index 0594a6e..f8e706a 100644 (file)
@@ -164,11 +164,8 @@ compactAllocateBlockInternal(Capability            *cap,
     default:
 #ifdef DEBUG
         ASSERT(!"code should not be reached");
-#elif __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
-        /* __builtin_unreachable is supported since GNU C 4.5 */
-        __builtin_unreachable();
 #else
-        abort();
+        RTS_UNREACHABLE;
 #endif
     }
     RELEASE_SM_LOCK;