@@ -1147,6 +1147,11 @@ pub enum Insn {
11471147 CheckInterrupts { state : InsnId } ,
11481148
11491149 BreakPoint ,
1150+
1151+ /// Only use this instruction in tests where you need to end a block with
1152+ /// a terminator, but don't ever expect the code to be executed. This
1153+ /// instruction should never be generated from iseq_to_hir
1154+ Unreachable ,
11501155}
11511156
11521157/// Macro that enumerates all operands of an Insn, dispatching to caller-provided
@@ -1165,7 +1170,7 @@ macro_rules! for_each_operand_impl {
11651170 | Insn :: LoadEC
11661171 | Insn :: GetEP { .. }
11671172 | Insn :: LoadSelf
1168- | Insn :: BreakPoint
1173+ | Insn :: BreakPoint | Insn :: Unreachable
11691174 | Insn :: PutSpecialObject { .. }
11701175 | Insn :: IncrCounter ( _)
11711176 | Insn :: IncrCounterPtr { .. } => { }
@@ -1471,7 +1476,7 @@ impl Insn {
14711476 | Insn :: PatchPoint { .. } | Insn :: SetIvar { .. } | Insn :: SetClassVar { .. } | Insn :: ArrayExtend { .. }
14721477 | Insn :: ArrayPush { .. } | Insn :: SideExit { .. } | Insn :: SetGlobal { .. }
14731478 | Insn :: SetLocal { .. } | Insn :: Throw { .. } | Insn :: IncrCounter ( _) | Insn :: IncrCounterPtr { .. }
1474- | Insn :: CheckInterrupts { .. } | Insn :: BreakPoint
1479+ | Insn :: CheckInterrupts { .. } | Insn :: BreakPoint | Insn :: Unreachable
14751480 | Insn :: StoreField { .. } | Insn :: WriteBarrier { .. } | Insn :: HashAset { .. }
14761481 | Insn :: ArrayAset { .. } => false ,
14771482 _ => true ,
@@ -1698,7 +1703,7 @@ impl Insn {
16981703 abstract_heaps:: Control
16991704 ) ,
17001705 Insn :: Entries { .. } => effects:: Any ,
1701- Insn :: BreakPoint => Effect :: read_write ( abstract_heaps:: Empty , abstract_heaps:: Control ) ,
1706+ Insn :: BreakPoint | Insn :: Unreachable => Effect :: read_write ( abstract_heaps:: Empty , abstract_heaps:: Control ) ,
17021707 }
17031708 }
17041709
@@ -2223,6 +2228,7 @@ impl<'a> std::fmt::Display for InsnPrinter<'a> {
22232228 Insn :: CheckInterrupts { .. } => write ! ( f, "CheckInterrupts" ) ,
22242229 Insn :: IsA { val, class } => write ! ( f, "IsA {val}, {class}" ) ,
22252230 Insn :: BreakPoint => write ! ( f, "BreakPoint" ) ,
2231+ Insn :: Unreachable => write ! ( f, "Unreachable" ) ,
22262232 }
22272233 }
22282234}
@@ -2837,7 +2843,7 @@ impl Function {
28372843 | Insn :: PatchPoint { .. } | Insn :: SetIvar { .. } | Insn :: SetClassVar { .. } | Insn :: ArrayExtend { .. }
28382844 | Insn :: ArrayPush { .. } | Insn :: SideExit { .. } | Insn :: SetLocal { .. }
28392845 | Insn :: IncrCounter ( _) | Insn :: IncrCounterPtr { .. }
2840- | Insn :: CheckInterrupts { .. } | Insn :: BreakPoint
2846+ | Insn :: CheckInterrupts { .. } | Insn :: BreakPoint | Insn :: Unreachable
28412847 | Insn :: StoreField { .. } | Insn :: WriteBarrier { .. } | Insn :: HashAset { .. } | Insn :: ArrayAset { .. } =>
28422848 panic ! ( "Cannot infer type of instruction with no output: {}. See Insn::has_output()." , self . insns[ insn. 0 ] ) ,
28432849 Insn :: Const { val : Const :: Value ( val) } => Type :: from_value ( * val) ,
@@ -5810,7 +5816,7 @@ impl Function {
58105816 | Insn :: LoadSP
58115817 | Insn :: LoadEC
58125818 | Insn :: GetEP { .. }
5813- | Insn :: BreakPoint
5819+ | Insn :: BreakPoint | Insn :: Unreachable
58145820 | Insn :: LoadSelf
58155821 | Insn :: Snapshot { .. }
58165822 | Insn :: Jump { .. }
0 commit comments