From d300a734414ef6de7e8eb563b7cc4389c455ed08 Mon Sep 17 00:00:00 2001 From: Koichi Sasada Date: Fri, 29 May 2020 13:50:58 +0900 Subject: [PATCH] RUBY_ASSERT_NOASSUME If __builtin_assume() is enables and RUBY_DEBUG=0, RUBY_ASSERT(expr) will be compiled to __builtin_assume(expr) and compiler can assume expr is true and apply aggressive optimizations. However we observed doubtful behavior because of compiler optimizations, we introduce new macro RUBY_ASSERT_NOASSUME to disable __builtin_assume(). With this macro, we can try without __builtin_assume(). --- include/ruby/assert.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/ruby/assert.h b/include/ruby/assert.h index 5b435da8b9..8967973bf8 100644 --- a/include/ruby/assert.h +++ b/include/ruby/assert.h @@ -101,7 +101,7 @@ RBIMPL_SYMBOL_EXPORT_END() # define RBIMPL_ASSERT_OR_ASSUME(_) RUBY_ASSERT(_) #elif defined(RBIMPL_HAVE___ASSUME) # define RBIMPL_ASSERT_OR_ASSUME(_) RBIMPL_ASSUME(_) -#elif RBIMPL_HAS_BUILTIN(__builtin_assume) && RBIMPL_COMPILER_SINCE(Clang, 7, 0, 0) +#elif !RUBY_ASSERT_NOASSUME && RBIMPL_HAS_BUILTIN(__builtin_assume) && RBIMPL_COMPILER_SINCE(Clang, 7, 0, 0) # define RBIMPL_ASSERT_OR_ASSUME(_) RBIMPL_ASSUME(_) #else # define RBIMPL_ASSERT_OR_ASSUME(_) /* void */