diff options
author | Aaron Patterson <tenderlove@ruby-lang.org> | 2021-08-31 16:58:29 -0700 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2021-09-02 01:22:19 +0900 |
commit | cd4f5b13228879d954fa97b6aa479c4a5ef4fb0a (patch) | |
tree | 8c381dcc4235579c63b4fd69a3bff2f84808329b /test/ruby/test_array.rb | |
parent | 73b22b3ce9994b3e674de4d5016d2d9130b0e27d (diff) | |
download | ruby-cd4f5b13228879d954fa97b6aa479c4a5ef4fb0a.tar.gz |
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/ruby/test_array.rb')
-rw-r--r-- | test/ruby/test_array.rb | 6 |
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 |