aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/ruby/ruby.h9
-rw-r--r--win32/Makefile.sub1
2 files changed, 9 insertions, 1 deletions
diff --git a/include/ruby/ruby.h b/include/ruby/ruby.h
index a27fc5d637..bad0b3f1cc 100644
--- a/include/ruby/ruby.h
+++ b/include/ruby/ruby.h
@@ -41,8 +41,15 @@ extern "C" {
#ifndef NOINLINE
# define NOINLINE(x) x
#endif
+#ifndef ASSUME
+# ifdef UNREACHABLE
+# define ASSUME(x) (LIKELY(!!(x)) ? (void)0 : UNREACHABLE)
+# else
+# define ASSUME(x) ((void)0)
+# endif
+#endif
#ifndef UNREACHABLE
-# define UNREACHABLE /* unreachable */
+# define UNREACHABLE ((void)0) /* unreachable */
#endif
#ifdef __GNUC__
diff --git a/win32/Makefile.sub b/win32/Makefile.sub
index e07ed93b60..afcb29cd44 100644
--- a/win32/Makefile.sub
+++ b/win32/Makefile.sub
@@ -587,6 +587,7 @@ $(CONFIG_H): $(MKFILES) $(srcdir)/win32/Makefile.sub $(win_srcdir)/Makefile.sub
#define NOINLINE(x) __declspec(noinline) x
!endif
#define UNREACHABLE __assume(0)
+#define ASSUME(x) __assume(!!(x))
#define FUNC_STDCALL(x) __stdcall x
#define FUNC_CDECL(x) __cdecl x
#define FUNC_FASTCALL(x) __fastcall x