YJIT: fix CI issue reported by Koichi caused by small stack patch (#7442)

Includes small reproduction produced by Kokubun.

http://ci.rvm.jp/results/trunk-yjit@ruby-sp2-docker
This commit is contained in:
Maxime Chevalier-Boisvert 2023-03-03 18:02:52 -05:00 коммит произвёл GitHub
Родитель 62c2082f1f
Коммит 4d59d01621
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
2 изменённых файлов: 35 добавлений и 0 удалений

Просмотреть файл

@ -3605,3 +3605,30 @@ assert_equal 'Hello World', %q{
end
bar
}
# Regression: this creates a temp stack with > 127 elements
assert_normal_exit %q{
def foo(a)
[
a, a, a, a, a, a, a, a, a, a,
a, a, a, a, a, a, a, a, a, a,
a, a, a, a, a, a, a, a, a, a,
a, a, a, a, a, a, a, a, a, a,
a, a, a, a, a, a, a, a, a, a,
a, a, a, a, a, a, a, a, a, a,
a, a, a, a, a, a, a, a, a, a,
a, a, a, a, a, a, a, a, a, a,
a, a, a, a, a, a, a, a, a, a,
a, a, a, a, a, a, a, a, a, a,
a, a, a, a, a, a, a, a, a, a,
a, a, a, a, a, a, a, a, a, a,
a, a, a, a, a, a, a, a,
]
end
def entry
foo(1)
end
entry
}

Просмотреть файл

@ -5215,6 +5215,14 @@ fn gen_send_iseq(
return CantCompile;
}
// Reject ISEQs with very large temp stacks,
// this will allow us to use u8/i8 values to track stack_size and sp_offset
let stack_max = unsafe { rb_get_iseq_body_stack_max(iseq) };
if stack_max >= i8::MAX as u32 {
incr_counter!(iseq_stack_too_large);
return CantCompile;
}
// No support for callees with these parameters yet as they require allocation
// or complex handling.
if unsafe { get_iseq_flags_has_post(iseq) } {