Actions
Bug #22064
closedGC compaction breaks compare-by-identity sets
Bug #22064:
GC compaction breaks compare-by-identity sets
Description
GitHub PR: https://github.com/ruby/ruby/pull/16923
Compare-by-identity sets use the address for hashing, so we must pin it so the object does not move in GC compaction. Objects in a compare-by-identity set is not currently pinned, causing the set to be broken if the object is moved.
For example:
set = Set.new.compare_by_identity
o = Object.new
set.add(o)
puts set.include?(o)
GC.verify_compaction_references(expand_heap: true, toward: :empty)
puts set.include?(o)
It should output true twice, but it outputs true and false.
Actions