diff --git a/compile.c b/compile.c index c62deafd23..a5e082f46d 100644 --- a/compile.c +++ b/compile.c @@ -6400,11 +6400,11 @@ compile_case3(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const orig_no int pat_line = nd_line(pattern); LABEL *next_pat = NEW_LABEL(pat_line); ADD_INSN (cond_seq, pat_line, dup); - // NOTE: set deconstructed_pos to the current cached value location // (it's "under" the matchee value, so it's position is 2) CHECK(iseq_compile_pattern_each(iseq, cond_seq, pattern, l1, next_pat, FALSE, 2)); ADD_LABEL(cond_seq, next_pat); + LABEL_UNREMOVABLE(next_pat); } else { COMPILE_ERROR(ERROR_ARGS "unexpected node"); diff --git a/test/ruby/test_pattern_matching.rb b/test/ruby/test_pattern_matching.rb index 243a4cd2bd..e4c7507ac4 100644 --- a/test/ruby/test_pattern_matching.rb +++ b/test/ruby/test_pattern_matching.rb @@ -791,6 +791,16 @@ END true end end + + # https://bugs.ruby-lang.org/issues/17534 + assert_block do + case [0, 1, 2] + in x + true + in [*, 2, *] + false + end + end end def test_hash_pattern diff --git a/version.h b/version.h index 9a20707c89..c3e1f0f1b2 100644 --- a/version.h +++ b/version.h @@ -12,7 +12,7 @@ # define RUBY_VERSION_MINOR RUBY_API_VERSION_MINOR #define RUBY_VERSION_TEENY 0 #define RUBY_RELEASE_DATE RUBY_RELEASE_YEAR_STR"-"RUBY_RELEASE_MONTH_STR"-"RUBY_RELEASE_DAY_STR -#define RUBY_PATCHLEVEL 28 +#define RUBY_PATCHLEVEL 29 #define RUBY_RELEASE_YEAR 2021 #define RUBY_RELEASE_MONTH 2