diff options
-rw-r--r-- | include/ruby/ruby.h | 6 | ||||
-rw-r--r-- | marshal.c | 4 |
2 files changed, 7 insertions, 3 deletions
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;} @@ -1024,7 +1024,7 @@ VALUE rb_marshal_dump_limited(VALUE obj, VALUE port, int limit) { struct dump_arg *arg; - volatile VALUE wrapper; /* used to avoid memory leak in case of exception */ + VALUE wrapper; /* used to avoid memory leak in case of exception */ wrapper = TypedData_Make_Struct(rb_cData, struct dump_arg, &dump_arg_data, arg); arg->dest = 0; @@ -2038,7 +2038,7 @@ rb_marshal_load_with_proc(VALUE port, VALUE proc) { int major, minor, infection = 0; VALUE v; - volatile VALUE wrapper; /* used to avoid memory leak in case of exception */ + VALUE wrapper; /* used to avoid memory leak in case of exception */ struct load_arg *arg; v = rb_check_string_type(port); |