diff options
-rw-r--r-- | eval.c | 3 | ||||
-rw-r--r-- | eval_error.c | 5 |
2 files changed, 7 insertions, 1 deletions
@@ -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); |