diff --git a/set.c b/set.c index ed0ace4224..6dbfd535cf 100644 --- a/set.c +++ b/set.c @@ -528,6 +528,7 @@ set_i_initialize_copy(VALUE set, VALUE other) set_free_embedded(sobj); set_copy(&sobj->table, RSET_TABLE(other)); + rb_gc_writebarrier_remember(set); return set; } diff --git a/test/ruby/test_set.rb b/test/ruby/test_set.rb index 2bb7858eb2..3a8568762a 100644 --- a/test/ruby/test_set.rb +++ b/test/ruby/test_set.rb @@ -129,6 +129,12 @@ class TC_Set < Test::Unit::TestCase assert_same(set, ret) assert_equal(Set['a','b','c'], set) + set = Set[1,2] + ret = set.replace(Set.new('a'..'c')) + + assert_same(set, ret) + assert_equal(Set['a','b','c'], set) + set = Set[1,2] assert_raise(ArgumentError) { set.replace(3)