summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorKoichi Sasada <ko1@atdot.net>2020-05-29 13:50:58 +0900
committerKoichi Sasada <ko1@atdot.net>2020-05-29 13:50:58 +0900
commitd300a734414ef6de7e8eb563b7cc4389c455ed08 (patch)
tree8bf74eeff069a67906551823dd8e345cc3bb4409 /include
parent03d7f3cdb2550449bcf1c0c1b5529b5197dfb418 (diff)
downloadruby-d300a734414ef6de7e8eb563b7cc4389c455ed08.tar.gz
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().
Diffstat (limited to 'include')
-rw-r--r--include/ruby/assert.h2
1 files changed, 1 insertions, 1 deletions
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 */