From: usa@...
Date: 2017-03-25T16:31:58+00:00
Subject: [ruby-core:80331] [Ruby trunk Bug#12855] Inconsistent keys identity in compare_by_identity Hash when using literals

Issue #12855 has been updated by usa (Usaku NAKAMURA).

Backport changed from 2.1: UNKNOWN, 2.2: REQUIRED, 2.3: REQUIRED, 2.4: DONE to 2.1: UNKNOWN, 2.2: DONE, 2.3: REQUIRED, 2.4: DONE

ruby_2_2 r58099 merged revision(s) 57278,57279.

----------------------------------------
Bug #12855: Inconsistent keys identity in compare_by_identity Hash when using literals
https://bugs.ruby-lang.org/issues/12855#change-63808

* Author: Eregon (Benoit Daloze)
* Status: Closed
* Priority: Normal
* Assignee: tmm1 (Aman Gupta)
* Target version: 
* ruby -v: ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux]
* Backport: 2.1: UNKNOWN, 2.2: DONE, 2.3: REQUIRED, 2.4: DONE
----------------------------------------
This seems a regression since 2.2.
I would guess it's due to some optimization for having a string literal between []=.
That optimization should not trigger for compare_by_identity hashes, so both cases below are consistent.

~~~ruby
h = {}.compare_by_identity
h['pear'] = 1
h['pear'] = 2

p h.size # => 1
p h


h = {}.compare_by_identity
k1 = 'pear'
h[k1] = 1
k2 = 'pear'
h[k2] = 2

p h.size # => 2
p h
~~~



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>