== unreachable == fun unreachable() {} --------------------- L0: 1 2 mark({}) read (Unit) L1: 1 NEXT:[] error: PREV:[] sink: PREV:[, ] ===================== == a == fun a() { do { } while (true) unreachable() } --------------------- L0: 1 2 mark({ do { } while (true) unreachable() }) 3 mark(do { } while (true)) L2 [loop entry point]: L4 [body entry point]: mark({ }) PREV:[mark(do { } while (true)), jmp(L2)] read (Unit) L5 [body exit point]: L6 [condition entry point]: r(true) -> 2 magic[VALUE_CONSUMER](true|) -> jmp(L2) NEXT:[mark({ })] L3 [loop exit point]: - read (Unit) PREV:[] - mark(unreachable()) PREV:[] - call(unreachable(), unreachable) -> PREV:[] L1: 1 NEXT:[] PREV:[] error: PREV:[] sink: PREV:[, ] ===================== == b == fun b() { while (true) { } unreachable() } --------------------- L0: 1 2 mark({ while (true) { } unreachable() }) L2 [loop entry point]: L6 [condition entry point]: r(true) -> PREV:[mark({ while (true) { } unreachable() }), jmp(L2)] mark(while (true) { }) magic[VALUE_CONSUMER](true|) -> L4 [body entry point]: 3 mark({ }) read (Unit) 2 jmp(L2) NEXT:[r(true) -> ] L3 [loop exit point]: L5 [body exit point]: - read (Unit) PREV:[] - mark(unreachable()) PREV:[] - call(unreachable(), unreachable) -> PREV:[] L1: 1 NEXT:[] PREV:[] error: PREV:[] sink: PREV:[, ] =====================