summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAaron Patterson <tenderlove@ruby-lang.org>2021-08-31 16:58:29 -0700
committerNobuyoshi Nakada <nobu@ruby-lang.org>2021-09-02 01:22:19 +0900
commitcd4f5b13228879d954fa97b6aa479c4a5ef4fb0a (patch)
tree8c381dcc4235579c63b4fd69a3bff2f84808329b /test
parent73b22b3ce9994b3e674de4d5016d2d9130b0e27d (diff)
Guard array when appending
This prevents early collection of the array. The GC doesn't see the array on the stack when Ruby is compiled with optimizations enabled [ruby-core:105099] [Bug #18140]
Diffstat (limited to 'test')
-rw-r--r--test/ruby/test_array.rb6
1 files changed, 6 insertions, 0 deletions
diff --git a/test/ruby/test_array.rb b/test/ruby/test_array.rb
index 59e1ad463c..8de51c159d 100644
--- a/test/ruby/test_array.rb
+++ b/test/ruby/test_array.rb
@@ -654,6 +654,12 @@ class TestArray < Test::Unit::TestCase
assert_raise(TypeError) { [0].concat(:foo) }
assert_raise(FrozenError) { [0].freeze.concat(:foo) }
+
+ a = @cls[nil]
+ def (x = Object.new).to_ary; Array.new(10) {nil} << :ok; end
+ EnvUtil.under_gc_stress {a.concat(x)}
+ GC.start
+ assert_equal(:ok, a.last)
end
def test_count