From: nagachika00@... Date: 2016-04-03T15:47:20+00:00 Subject: [ruby-core:74795] [Ruby trunk Bug#11970] Multiple Assignment Into a Hash with Destructuring causes segfault Issue #11970 has been updated by Tomoyuki Chikanaga. Backport changed from 2.0.0: REQUIRED, 2.1: REQUIRED, 2.2: REQUIRED, 2.3: REQUIRED to 2.0.0: REQUIRED, 2.1: REQUIRED, 2.2: REQUIRED, 2.3: DONE ruby_2_3 r54478 merged revision(s) 53495. ---------------------------------------- Bug #11970: Multiple Assignment Into a Hash with Destructuring causes segfault https://bugs.ruby-lang.org/issues/11970#change-57918 * Author: Davis Wahl * Status: Closed * Priority: Normal * Assignee: * ruby -v: ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux] * Backport: 2.0.0: REQUIRED, 2.1: REQUIRED, 2.2: REQUIRED, 2.3: DONE ---------------------------------------- Segfaults in 2.2.3 and 2.3.0, In 2.1.0 and below, produces `{[:foo]=>:bar}` ~~~ruby 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 ~~~ruby 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-------------------------------- dump (12.4 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: