summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--compile.c7
-rw-r--r--test/ruby/test_syntax.rb17
-rw-r--r--version.h2
3 files changed, 22 insertions, 4 deletions
diff --git a/compile.c b/compile.c
index e6742f073e..db6e4f6f97 100644
--- a/compile.c
+++ b/compile.c
@@ -478,9 +478,6 @@ static void
validate_labels(rb_iseq_t *iseq, st_table *labels_table)
{
st_foreach(labels_table, validate_label, (st_data_t)iseq);
- if (!NIL_P(iseq->compile_data->err_info)) {
- rb_exc_raise(iseq->compile_data->err_info);
- }
}
VALUE
@@ -1046,6 +1043,10 @@ new_child_iseq(rb_iseq_t *iseq, NODE *node,
static int
iseq_setup(rb_iseq_t *iseq, LINK_ANCHOR *anchor)
{
+ if (!NIL_P(iseq->compile_data->err_info)) {
+ return COMPILE_NG;
+ }
+
/* debugs("[compile step 2] (iseq_array_to_linkedlist)\n"); */
if (compile_debug > 5)
diff --git a/test/ruby/test_syntax.rb b/test/ruby/test_syntax.rb
index f0502d37e4..fee5605b61 100644
--- a/test/ruby/test_syntax.rb
+++ b/test/ruby/test_syntax.rb
@@ -658,6 +658,23 @@ eom
end
end
+ def test_syntax_error_in_rescue
+ bug12613 = '[ruby-core:76531] [Bug #12613]'
+ assert_syntax_error("#{<<-"begin;"}\n#{<<-"end;"}", /Invalid retry/, bug12613)
+ begin;
+ while true
+ begin
+ p
+ rescue
+ retry
+ else
+ retry
+ end
+ break
+ end
+ end;
+ end
+
private
def not_label(x) @result = x; @not_label ||= nil end
diff --git a/version.h b/version.h
index 495bbfc08e..9e167b4ddd 100644
--- a/version.h
+++ b/version.h
@@ -1,6 +1,6 @@
#define RUBY_VERSION "2.2.7"
#define RUBY_RELEASE_DATE "2017-03-26"
-#define RUBY_PATCHLEVEL 422
+#define RUBY_PATCHLEVEL 423
#define RUBY_RELEASE_YEAR 2017
#define RUBY_RELEASE_MONTH 3