Skip to content

Commit 7cf7241

Browse files
committed
use the narrower of Class and Module
1 parent 3f3de21 commit 7cf7241

File tree

2 files changed

+6
-5
lines changed

2 files changed

+6
-5
lines changed

zjit/src/hir.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4435,10 +4435,11 @@ impl Function {
44354435

44364436
/// This puts a guard that establishes the preconditon for [Self::load_ivar]
44374437
fn load_ivar_guard_type(&mut self, block: BlockId, recv: InsnId, recv_type: ProfiledType, state: InsnId) -> InsnId {
4438-
if recv_type.class().is_subclass_of(unsafe { rb_cModule }) == ClassRelationship::Subclass {
4439-
self.push_insn(block, Insn::GuardType { val: recv, guard_type: types::Module, state })
4440-
} else if recv_type.class().is_subclass_of(unsafe { rb_cClass }) == ClassRelationship::Subclass {
4438+
if recv_type.class().is_subclass_of(unsafe { rb_cClass }) == ClassRelationship::Subclass {
4439+
// Check class first since `Class < Module`
44414440
self.push_insn(block, Insn::GuardType { val: recv, guard_type: types::Class, state })
4441+
} else if recv_type.class().is_subclass_of(unsafe { rb_cModule }) == ClassRelationship::Subclass {
4442+
self.push_insn(block, Insn::GuardType { val: recv, guard_type: types::Module, state })
44424443
} else if recv_type.flags().is_typed_data() {
44434444
self.push_insn(block, Insn::GuardType { val: recv, guard_type: types::TypedTData, state })
44444445
} else {

zjit/src/hir/opt_tests.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7424,7 +7424,7 @@ mod hir_opt_tests {
74247424
Jump bb3(v4)
74257425
bb3(v6:BasicObject):
74267426
PatchPoint SingleRactorMode
7427-
v17:Module = GuardType v6, Module
7427+
v17:Class = GuardType v6, Class
74287428
v18:CShape = LoadField v17, :_shape_id@0x1000
74297429
v19:CShape[0x1001] = GuardBitEquals v18, CShape(0x1001)
74307430
PatchPoint RootBoxOnly
@@ -7459,7 +7459,7 @@ mod hir_opt_tests {
74597459
Jump bb3(v4)
74607460
bb3(v6:BasicObject):
74617461
PatchPoint SingleRactorMode
7462-
v17:Module = GuardType v6, Module
7462+
v17:Class = GuardType v6, Class
74637463
v18:CShape = LoadField v17, :_shape_id@0x1000
74647464
v19:CShape[0x1001] = GuardBitEquals v18, CShape(0x1001)
74657465
PatchPoint RootBoxOnly

0 commit comments

Comments
 (0)