diff --git a/eval.c b/eval.c index 8c8ac947f6..69a15d9985 100644 --- a/eval.c +++ b/eval.c @@ -755,6 +755,9 @@ rb_raise_jump(VALUE mesg, VALUE cause) void rb_jump_tag(int tag) { + if (UNLIKELY(tag < TAG_RETURN || tag > TAG_FATAL)) { + unknown_longjmp_status(tag); + } JUMP_TAG(tag); } diff --git a/eval_error.c b/eval_error.c index 0f2f165cc8..e907d7ee88 100644 --- a/eval_error.c +++ b/eval_error.c @@ -258,6 +258,9 @@ sysexit_status(VALUE err) return NUM2INT(st); } +#define unknown_longjmp_status(status) \ + rb_bug("Unknown longjmp status %d", status) + static int error_handle(int ex) { @@ -314,7 +317,7 @@ error_handle(int ex) error_print(); break; default: - rb_bug("Unknown longjmp status %d", ex); + unknown_longjmp_status(ex); break; } rb_threadptr_reset_raised(th);