Merge pull request #241 from ffried/swift-3.1-branch
[Cherry Pick] lock: Avoid use of undefined DISPATCH_INTERNAL_CRASH
diff --git a/src/shims/lock.h b/src/shims/lock.h
index 3178793..4bbbb42 100644
--- a/src/shims/lock.h
+++ b/src/shims/lock.h
@@ -548,7 +548,17 @@
return os_atomic_xchg(pred, DLOCK_ONCE_DONE, release);
#elif defined(__linux__)
if (unlikely(syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0) < 0)) {
- DISPATCH_INTERNAL_CRASH(errno, "sys_membarrier not supported");
+ /*
+ * sys_membarrier not supported
+ *
+ * Ideally we would call DISPATCH_INTERNAL_CRASH() here, but
+ * due to ordering constraints in internal.h required by Darwin
+ * the macro is undefined when this header is included.
+ * Instead, open-code what would be a call to
+ * _dispatch_hardware_crash() inside DISPATCH_INTERNAL_CRASH().
+ */
+ __asm__("");
+ __builtin_trap();
}
return os_atomic_xchg(pred, DLOCK_ONCE_DONE, relaxed);
#else