< :前の番号
^ :番号順リスト
> :次の番号
P :前の記事(スレッド移動)
N :次の記事(スレッド移動)
|<:前のスレッド
>|:次のスレッド
^ :返事先
_:自分への返事
>:同じ返事先を持つ記事(前)
<:同じ返事先を持つ記事(後)
---:分割してスレッド表示、再表示
| :分割して(縦)スレッド表示、再表示
~ :スレッドのフレーム消去
.:インデックス
..:インデックスのインデックス
Issue #18250 has been updated by byroot (Jean Boussier).
I tried to backport these 5 commits and it does solve the problem in normal builds. However with `cppflags=-DRUBY_DEBUG` I do get the following error:
```
estISeq#test_cdhash_after_roundtripWe are killing the stack canary set by opt_case_dispatch, at <RubyVM::InstructionSequence:<compiled>@/Users/byroot/src/github.com/Shopify/ruby/test/ruby/test_iseq.rb:1>@pc=25
watch out the C stack trace.
== disasm: #<ISeq:<compiled>@/Users/byroot/src/github.com/Shopify/ruby/test/ruby/test_iseq.rb:1 (1,0)-(4,3)> (catch: FALSE)
0000 opt_getinlinecache 9, <is:0> ( 1)[Li]
0003 putobject true
0005 getconstant :Class
0007 opt_setinlinecache <is:0>
0009 opt_getinlinecache 18, <is:1>
0012 putobject true
0014 getconstant :String
0016 opt_setinlinecache <is:1>
0018 opt_send_without_block <calldata!mid:new, argc:1, ARGS_SIMPLE>
0020 putstring "foo"
0022 opt_send_without_block <calldata!mid:new, argc:1, ARGS_SIMPLE>
0024 dup
0025 opt_case_dispatch <cdhash>, 35
0028 dup ( 2)
0029 putobject "foo"
0031 checkmatch 2
0033 branchif 38
0035 pop ( 1)
0036 putnil
0037 leave ( 3)
0038 pop ( 2)
0039 putobject 42 ( 3)[Li]
0041 leave
/Users/byroot/src/github.com/Shopify/ruby/test/ruby/test_iseq.rb:1: [BUG] see above.
```
From this test:
```ruby
def test_cdhash_after_roundtrip
# CDHASH was not built properly when loading from binary and
# was causing opt_case_dispatch to clobber its stack canary
# for its "leaf" instruction attribute.
iseq = compile(<<~EOF)
case Class.new(String).new("foo")
when "foo"
42
end
EOF
assert_equal(42, ISeq.load_from_binary(iseq.to_binary).eval)
end
```
That test was added in 4323fa96c4350ecad5f3d607805b7ecd3870bdb5, so I wonder if we miss something.
----------------------------------------
Bug #18250: Anonymous variables seem to break `Ractor.make_shareable`
https://bugs.ruby-lang.org/issues/18250#change-94917
* Author: tenderlovemaking (Aaron Patterson)
* Status: Closed
* Priority: Normal
* ruby -v: ruby 3.0.1p64 (2021-04-05 revision 0fb782ee38) [x86_64-darwin20]
* Backport: 2.7: DONTNEED, 3.0: REQUIRED
----------------------------------------
The following code breaks with a strange error:
```ruby
def foo(*); ->{ super };end
Ractor.make_shareable(foo) # expected Symbol
```
Output:
```
[aaron@tc ~/g/ruby (master)]$ cat test.rb
def foo(*); ->{ super };end
Ractor.make_shareable(foo) # expected Symbol
[aaron@tc ~/g/ruby (master)]$ ruby test.rb
<internal:ractor>:816:in `make_shareable': wrong argument type false (expected Symbol) (TypeError)
from test.rb:2:in `<main>'
[aaron@tc ~/g/ruby (master)]$
```
The reason is because the `*` parameter has no name, but Ractor tries to find the name so it can make an exception.
I *expect* the above program to raise an `Ractor::IsolationError`, but instead it raises a `TypeError`.
I've attached a patch that fixes this bug.
---Files--------------------------------
0001-Give-params-a-name.patch (3.33 KB)
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>