From 5afc642336f39c41c07408610bf38b13bda87b42 Mon Sep 17 00:00:00 2001 From: nobu Date: Mon, 13 Feb 2017 08:14:19 +0000 Subject: ruby.h: RB_GC_GUARD stronger than gcc7 * include/ruby/ruby.h (RB_GC_GUARD): prevent guarded pointer from optimization by using as an input to inline asm. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57619 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- include/ruby/ruby.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'include/ruby') diff --git a/include/ruby/ruby.h b/include/ruby/ruby.h index 6144c67234..d0651f40ac 100644 --- a/include/ruby/ruby.h +++ b/include/ruby/ruby.h @@ -536,7 +536,11 @@ static inline int rb_type(VALUE obj); #ifdef __GNUC__ #define RB_GC_GUARD(v) \ - (*__extension__ ({volatile VALUE *rb_gc_guarded_ptr = &(v); rb_gc_guarded_ptr;})) + (*__extension__ ({ \ + volatile VALUE *rb_gc_guarded_ptr = &(v); \ + __asm__("### RB_GC_GUARD("#v")" : : "m"(rb_gc_guarded_ptr)); \ + rb_gc_guarded_ptr; \ + })) #elif defined _MSC_VER #pragma optimize("", off) static inline volatile VALUE *rb_gc_guarded_ptr(volatile VALUE *ptr) {return ptr;} -- cgit v1.2.3