Project

General

Profile

Actions

Bug #20956

closed

Nested alternation pattern matching bug in 3.4.0-rc1

Added by nevans (Nicholas Evans) 6 days ago. Updated 5 days ago.

Status:
Closed
Assignee:
Target version:
-
[ruby-core:120253]

Description

I think I've found a pattern matching bug in ruby 3.4.0-rc1.

[123, ["foo"]] in [_, /\Afoo\b/i | [/\Afoo\z/i, *]]

I also tested this in ruby 2.7.8, with:

case [123, ["foo"]]; in [_, /\Afoo\b/i | [/\Afoo\z/i, *]] then true; else false end

These return true in ruby 2.7.8, 3.0.7, 3.1.6, 3.2.6, and 3.3.6.
But they return false in 3.4.0-rc1.

I'm not sure if this is the best example, but it is a simplification of how I came across the bug.

Here are some other similar cases, which give the same result in 3.4.0-rc1 and 3.3.6:

irb(main):001> ["foo"] in /\Afoo\b/i | [/\Afoo\z/i, *]
=> true
irb(main):002> [123, ["foo"]] in [_, [/\Afoo\z/i, *]]
=> true
irb(main):003> [["foo"]] in [[/\Afoo\z/i, *]]
=> true

But this case exhibits the bug again:

irb(main):004> [["foo"]] in [/\Afoo\b/i | [/\Afoo\z/i, *]]
=> false
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0