From 50b78ebb982b9e3e3639967c27786557aa5faf14 Mon Sep 17 00:00:00 2001 From: nobu Date: Fri, 10 Oct 2014 12:45:21 +0000 Subject: ruby/ruby.h: eliminate disabled function call * include/ruby/ruby.h (RUBY_SAFE_LEVEL_CHECK): eliminate function call for warning/error if not match to get rid of unconditional warning/error by a certain compiler option. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47866 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- include/ruby/ruby.h | 2 +- thread.c | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/include/ruby/ruby.h b/include/ruby/ruby.h index 8171ab3e32..dbea8e4c67 100644 --- a/include/ruby/ruby.h +++ b/include/ruby/ruby.h @@ -568,7 +568,7 @@ int ruby_safe_level_4_warning(void) __attribute__((warning("$SAFE=4 is obsolete" __extension__(__builtin_constant_p(level) && \ ((level) < 0 || RUBY_SAFE_LEVEL_MAX < (level))) #define RUBY_SAFE_LEVEL_CHECK(level, type) \ - (RUBY_SAFE_LEVEL_INVALID_P(level) ? ruby_safe_level_4_##type() : (level)) + __extension__(__builtin_choose_expr(RUBY_SAFE_LEVEL_INVALID_P(level), ruby_safe_level_4_##type(), (level))) #define rb_secure(level) rb_secure(RUBY_SAFE_LEVEL_CHECK(level, warning)) #define rb_set_safe_level(level) rb_set_safe_level(RUBY_SAFE_LEVEL_CHECK(level, error)) #endif diff --git a/thread.c b/thread.c index aedd0c1e0e..14a4148c6f 100644 --- a/thread.c +++ b/thread.c @@ -145,7 +145,11 @@ static inline void blocking_region_end(rb_thread_t *th, struct rb_blocking_regio } while(0) #ifdef __GNUC__ +#ifdef HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR +#define only_if_constant(expr, notconst) __builtin_choose_expr(__builtin_constant_p(expr), (expr), (notconst)) +#else #define only_if_constant(expr, notconst) (__builtin_constant_p(expr) ? (expr) : (notconst)) +#endif #else #define only_if_constant(expr, notconst) notconst #endif -- cgit v1.2.3