From: dwahl@... Date: 2016-01-08T18:27:15+00:00 Subject: [ruby-core:72778] [Ruby trunk - Bug #11970] Multiple Assignment Into a Hash with Destructuring causes segfault Issue #11970 has been updated by Davis Wahl. I apologize for whatever I did to mangle the formatting. ---------------------------------------- Bug #11970: Multiple Assignment Into a Hash with Destructuring causes segfault https://bugs.ruby-lang.org/issues/11970#change-56022 * Author: Davis Wahl * Status: Open * Priority: Normal * Assignee: * ruby -v: ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN ---------------------------------------- # 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-------------------------------- dump (12.4 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: