diff options
-rw-r--r-- | vm_trace.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/vm_trace.c b/vm_trace.c index 39d2a062db..9a7f0cc087 100644 --- a/vm_trace.c +++ b/vm_trace.c @@ -378,8 +378,8 @@ rb_suppress_tracing(VALUE (*func)(VALUE), VALUE arg) { volatile int raised; VALUE result = Qnil; - rb_execution_context_t *ec = GET_EC(); - rb_vm_t *vm = rb_ec_vm_ptr(ec); + rb_execution_context_t *const ec = GET_EC(); + rb_vm_t *const vm = rb_ec_vm_ptr(ec); enum ruby_tag_type state; rb_trace_arg_t dummy_trace_arg; dummy_trace_arg.event = 0; @@ -392,9 +392,12 @@ rb_suppress_tracing(VALUE (*func)(VALUE), VALUE arg) raised = rb_ec_reset_raised(ec); EC_PUSH_TAG(ec); - if ((state = EC_EXEC_TAG()) == TAG_NONE) { + if (LIKELY((state = EC_EXEC_TAG()) == TAG_NONE)) { result = (*func)(arg); } + else { + (void)*&vm; /* suppress "clobbered" warning */ + } EC_POP_TAG(); if (raised) { |