Project

General

Profile

Bug #11970

Updated by nobu (Nobuyoshi Nakada) over 8 years ago

# Segfaults in 2.2.3 and 2.3.0, In 2.1.0 and below, produces `{[:foo]=>:bar}` {[: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]` 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] 
 ~~~ 

Back