summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--meson.build3
-rw-r--r--shared/helpers.h20
2 files changed, 22 insertions, 1 deletions
diff --git a/meson.build b/meson.build
index 2d9da454..7f8fed3d 100644
--- a/meson.build
+++ b/meson.build
@@ -79,7 +79,8 @@ elif cc.has_header_symbol('sys/mkdev.h', 'major')
endif
optional_libc_funcs = [
- 'mkostemp', 'strchrnul', 'initgroups', 'posix_fallocate', 'memfd_create'
+ 'mkostemp', 'strchrnul', 'initgroups', 'posix_fallocate',
+ 'memfd_create', 'unreachable',
]
foreach func : optional_libc_funcs
if cc.has_function(func)
diff --git a/shared/helpers.h b/shared/helpers.h
index 32938eca..2e7ed2ea 100644
--- a/shared/helpers.h
+++ b/shared/helpers.h
@@ -179,6 +179,26 @@ u64_from_u32s(uint32_t hi, uint32_t lo)
return ((uint64_t)hi << 32) + lo;
}
+#ifndef __has_builtin
+# define __has_builtin(x) 0
+#endif
+
+#if defined(HAVE_UNREACHABLE) || __has_builtin(__builtin_unreachable)
+#define unreachable(str) \
+do { \
+ assert(!str); \
+ __builtin_unreachable(); \
+} while (0)
+#elif defined (_MSC_VER)
+#define unreachable(str) \
+do { \
+ assert(!str); \
+ __assume(0); \
+} while (0)
+#else
+#define unreachable(str) assert(!str)
+#endif
+
#ifdef __cplusplus
}
#endif