summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--set.c1
-rw-r--r--test/ruby/test_set.rb6
2 files changed, 7 insertions, 0 deletions
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
@@ -130,6 +130,12 @@ class TC_Set < Test::Unit::TestCase
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)
}