Actions
Bug #11970
closedMultiple Assignment Into a Hash with Destructuring causes segfault
Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]
Description
Segfaults in 2.2.3 and 2.3.0, In 2.1.0 and below, produces {[:foo]=>:bar}
foo = [:foo]
bar = [:bar]
h = {}
h[*foo], _tail = *bar # Segfault
Using hash assignment/destructuring in this way may very well be undefined. I am surprised that the hash key h[*foo]
destructures in later examples, but I'm not really sure what the behavior should be. A number of similar constructs
produce consistent behavior, which leads me to believe the above syntax should work (or at least not segfault).
Below examples produce the same output in ruby 1.9.3, 2.1.0, 2.2.3, and 2.3.0
h = {}
h[:foo], _tail = *bar
puts h
# => {:foo => :bar}
h = {}
h[foo[0]], _tail = *bar
puts h
# => {:foo => :bar}
h = {}
h[*foo] = :bar
puts h
# => {:foo => :bar}
Rubies Tested:
ruby 1.9.3p550 (2014-10-27 revision 48165) [x86_64-linux]
ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-linux]
ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-linux]
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]
Files
Actions
Like0
Like0Like0Like0Like0Like0Like0