aboutsummaryrefslogtreecommitdiffstats
path: root/vm.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-06-12 13:01:40 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-06-12 13:01:40 +0000
commit3d980e1643305ff2ef7492d5fe25d89f63b29268 (patch)
treec1e35f2633af74ccf0e73915449ac5383e8e0ea0 /vm.c
parentdc0d502b71496f15fc03e421cd60afbcb9102eac (diff)
downloadruby-3d980e1643305ff2ef7492d5fe25d89f63b29268.tar.gz
vm.c: break from orphan block
* vm.c (rb_vm_search_cf_from_ep): break from orphan block is possible condition, but not [BUG]. [ruby-core:69548] [Bug #11254] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50850 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'vm.c')
-rw-r--r--vm.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/vm.c b/vm.c
index fc135b00fa..408dc6dc13 100644
--- a/vm.c
+++ b/vm.c
@@ -44,7 +44,7 @@ rb_vm_search_cf_from_ep(const rb_thread_t * const th, rb_control_frame_t *cfp, c
cfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(cfp);
}
- rb_bug("rb_vm_search_cf_from_ep: no corresponding cfp");
+ return NULL;
}
}
@@ -1201,6 +1201,12 @@ vm_iter_break(rb_thread_t *th, VALUE val)
VALUE *ep = VM_CF_PREV_EP(cfp);
rb_control_frame_t *target_cfp = rb_vm_search_cf_from_ep(th, cfp, ep);
+#if 0 /* raise LocalJumpError */
+ if (!target_cfp) {
+ rb_vm_localjump_error("unexpected break", val, TAG_BREAK);
+ }
+#endif
+
th->state = TAG_BREAK;
th->errinfo = (VALUE)THROW_DATA_NEW(val, target_cfp, TAG_BREAK);
TH_JUMP_TAG(th, TAG_BREAK);