Skip to content

Commit 9a5c5bf

Browse files
rwstaunerk0kubun
authored andcommitted
ZJIT: Add HIR tests for block arg nil and non-nil
1 parent 29e4bf1 commit 9a5c5bf

1 file changed

Lines changed: 62 additions & 0 deletions

File tree

zjit/src/hir/opt_tests.rs

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9774,6 +9774,68 @@ mod hir_opt_tests {
97749774
");
97759775
}
97769776

9777+
#[test]
9778+
fn test_optimize_send_with_non_nil_block_arg() {
9779+
eval(r#"
9780+
def foo = 42
9781+
9782+
def test
9783+
block = :to_s
9784+
foo(&block)
9785+
end
9786+
test; test
9787+
"#);
9788+
assert_snapshot!(hir_string("test"), @"
9789+
fn test@<compiled>:5:
9790+
bb1():
9791+
EntryPoint interpreter
9792+
v1:BasicObject = LoadSelf
9793+
v2:NilClass = Const Value(nil)
9794+
Jump bb3(v1, v2)
9795+
bb2():
9796+
EntryPoint JIT(0)
9797+
v5:BasicObject = LoadArg :self@0
9798+
v6:NilClass = Const Value(nil)
9799+
Jump bb3(v5, v6)
9800+
bb3(v8:BasicObject, v9:NilClass):
9801+
v13:StaticSymbol[:to_s] = Const Value(VALUE(0x1000))
9802+
v19:BasicObject = Send v8, &block, :foo, v13 # SendFallbackReason: Complex argument passing
9803+
CheckInterrupts
9804+
Return v19
9805+
");
9806+
}
9807+
9808+
#[test]
9809+
fn test_optimize_send_with_nil_block_arg() {
9810+
eval(r#"
9811+
def foo = 42
9812+
9813+
def test
9814+
block = nil
9815+
foo(&block)
9816+
end
9817+
test; test
9818+
"#);
9819+
assert_snapshot!(hir_string("test"), @"
9820+
fn test@<compiled>:5:
9821+
bb1():
9822+
EntryPoint interpreter
9823+
v1:BasicObject = LoadSelf
9824+
v2:NilClass = Const Value(nil)
9825+
Jump bb3(v1, v2)
9826+
bb2():
9827+
EntryPoint JIT(0)
9828+
v5:BasicObject = LoadArg :self@0
9829+
v6:NilClass = Const Value(nil)
9830+
Jump bb3(v5, v6)
9831+
bb3(v8:BasicObject, v9:NilClass):
9832+
v13:NilClass = Const Value(nil)
9833+
v19:BasicObject = Send v8, &block, :foo, v13 # SendFallbackReason: Complex argument passing
9834+
CheckInterrupts
9835+
Return v19
9836+
");
9837+
}
9838+
97779839
#[test]
97789840
fn test_inline_attr_reader_constant() {
97799841
eval("

0 commit comments

Comments
 (0)