Skip to content

Commit 9c0ebff

Browse files
st0012k0kubun
andauthored
ZJIT: Avoid matching built-in iseq's HIR line numbers in tests (ruby#14124)
ZJIT: Avoid matching built-in ISEQs' HIR line numbers in tests Co-authored-by: Author: Takashi Kokubun <[email protected]>
1 parent 4d26ccd commit 9c0ebff

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

zjit/src/hir.rs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2242,6 +2242,12 @@ impl<'a> std::fmt::Display for FunctionPrinter<'a> {
22422242
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
22432243
let fun = &self.fun;
22442244
let iseq_name = iseq_get_location(fun.iseq, 0);
2245+
// In tests, strip the line number for builtin ISEQs to make tests stable across line changes
2246+
let iseq_name = if cfg!(test) && iseq_name.contains("@<internal:") {
2247+
iseq_name[..iseq_name.rfind(':').unwrap()].to_string()
2248+
} else {
2249+
iseq_name
2250+
};
22452251
writeln!(f, "fn {iseq_name}:")?;
22462252
for block_id in fun.rpo() {
22472253
write!(f, "{block_id}(")?;
@@ -5003,7 +5009,7 @@ mod tests {
50035009
#[test]
50045010
fn test_invokebuiltin_delegate_annotated() {
50055011
assert_method_hir_with_opcode("Float", YARVINSN_opt_invokebuiltin_delegate_leave, expect![[r#"
5006-
fn Float@<internal:kernel>:197:
5012+
fn Float@<internal:kernel>:
50075013
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject, v3:BasicObject):
50085014
v6:Flonum = InvokeBuiltin rb_f_float, v0, v1, v2
50095015
Jump bb1(v0, v1, v2, v3, v6)
@@ -5015,7 +5021,7 @@ mod tests {
50155021
#[test]
50165022
fn test_invokebuiltin_cexpr_annotated() {
50175023
assert_method_hir_with_opcode("class", YARVINSN_opt_invokebuiltin_delegate_leave, expect![[r#"
5018-
fn class@<internal:kernel>:20:
5024+
fn class@<internal:kernel>:
50195025
bb0(v0:BasicObject):
50205026
v3:Class = InvokeBuiltin _bi20, v0
50215027
Jump bb1(v0, v3)
@@ -5031,7 +5037,7 @@ mod tests {
50315037
assert!(iseq_contains_opcode(iseq, YARVINSN_opt_invokebuiltin_delegate), "iseq Dir.open does not contain invokebuiltin");
50325038
let function = iseq_to_hir(iseq).unwrap();
50335039
assert_function_hir(function, expect![[r#"
5034-
fn open@<internal:dir>:184:
5040+
fn open@<internal:dir>:
50355041
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject, v3:BasicObject, v4:BasicObject):
50365042
v5:NilClass = Const Value(nil)
50375043
v8:BasicObject = InvokeBuiltin dir_s_open, v0, v1, v2
@@ -5045,7 +5051,7 @@ mod tests {
50455051
assert!(iseq_contains_opcode(iseq, YARVINSN_opt_invokebuiltin_delegate_leave), "iseq GC.enable does not contain invokebuiltin");
50465052
let function = iseq_to_hir(iseq).unwrap();
50475053
assert_function_hir(function, expect![[r#"
5048-
fn enable@<internal:gc>:55:
5054+
fn enable@<internal:gc>:
50495055
bb0(v0:BasicObject):
50505056
v3:BasicObject = InvokeBuiltin gc_enable, v0
50515057
Jump bb1(v0, v3)
@@ -5060,7 +5066,7 @@ mod tests {
50605066
assert!(iseq_contains_opcode(iseq, YARVINSN_invokebuiltin), "iseq GC.start does not contain invokebuiltin");
50615067
let function = iseq_to_hir(iseq).unwrap();
50625068
assert_function_hir(function, expect![[r#"
5063-
fn start@<internal:gc>:36:
5069+
fn start@<internal:gc>:
50645070
bb0(v0:BasicObject, v1:BasicObject, v2:BasicObject, v3:BasicObject, v4:BasicObject):
50655071
v6:FalseClass = Const Value(false)
50665072
v8:BasicObject = InvokeBuiltin gc_start_internal, v0, v1, v2, v3, v6

0 commit comments

Comments
 (0)