Actions
Bug #20204
closed3.3.0 YJIT rises TypeError instead of ArgumentError with some incorrect calls
Description
Test with:
def foo(a, *) = a
def call(args, &)
foo(1)
foo(*args, &)
end
call([1, 2])
call([])
$ ruby ../test.rb
../test.rb:1:in `foo': wrong number of arguments (given 0, expected 1+) (ArgumentError)
$ ruby --yjit-call-threshold=1 ../test.rb
../test.rb:5:in `call': wrong argument type Array (expected Proc) (TypeError)
Updated by alanwu (Alan Wu) 7 months ago
- Status changed from Open to Closed
Applied in changeset git|7f51959ff14fbe06bc1afd283d1af17b26161cf4.
YJIT: Move guard up for a case of splat+rest
Previously, YJIT put the guard for having enough items to extract from
splat array at a place where the side exit is invalid, so if the guard
fails, YJIT could raise something other than ArgumentError. Move the
guard up to a place before any stack manipulation.
[Bug #20204]
Updated by k0kubun (Takashi Kokubun) 3 months ago
- Backport changed from 3.0: DONTNEED, 3.1: DONTNEED, 3.2: DONTNEED, 3.3: REQUIRED to 3.0: DONTNEED, 3.1: DONTNEED, 3.2: DONTNEED, 3.3: DONE
ruby_3_3 9c81bbbbb738a5747eab5455292536369977ee92 merged revision(s) 7f51959ff14fbe06bc1afd283d1af17b26161cf4.
Actions
Like0
Like0Like0