Closed
Description
Bug report
Bug description:
With the code from PR 122564, the destination of the "not taken" branch out of line 9 below, offset 46, maps (through co_locations()
) to None
, making it difficult (if not impossible) to interpret for coverage:
x = 0
v = 1
match v:
case 1:
if x < 0:
x = 1
case 2:
if x < 0:
x = 1
x += 1
Result:
0 0 RESUME 0
1 2 LOAD_CONST 0 (0)
4 STORE_NAME 0 (x)
2 6 LOAD_CONST 1 (1)
8 STORE_NAME 1 (v)
3 10 LOAD_NAME 1 (v)
4 12 COPY 1
14 LOAD_CONST 1 (1)
16 COMPARE_OP 88 (bool(==))
20 POP_JUMP_IF_FALSE 12 (to L2)
24 NOT_TAKEN
26 POP_TOP
5 28 LOAD_NAME 0 (x)
30 LOAD_CONST 0 (0)
32 COMPARE_OP 18 (bool(<))
36 POP_JUMP_IF_FALSE 3 (to L1)
40 NOT_TAKEN
6 42 LOAD_CONST 1 (1)
44 STORE_NAME 0 (x)
-- L1: 46 JUMP_FORWARD 15 (to L3)
7 L2: 48 LOAD_CONST 2 (2)
50 COMPARE_OP 88 (bool(==))
54 POP_JUMP_IF_FALSE 10 (to L3)
58 NOT_TAKEN
8 60 LOAD_NAME 0 (x)
62 LOAD_CONST 0 (0)
64 COMPARE_OP 18 (bool(<))
68 POP_JUMP_IF_FALSE 3 (to L3)
72 NOT_TAKEN
9 74 LOAD_CONST 1 (1)
76 STORE_NAME 0 (x)
10 L3: 78 LOAD_NAME 0 (x)
80 LOAD_CONST 1 (1)
82 BINARY_OP 13 (+=)
86 STORE_NAME 0 (x)
88 RETURN_CONST 3 (None)
'<module>' branches:
ex9.py 4:9-4:10 "1" (<module>@20) -> 4:9-4:10 "1" (<module>@26) [case -> out]
ex9.py 4:9-4:10 "1" (<module>@20) -> 7:9-7:10 "2" (<module>@48) [case -> next case]
ex9.py 5:11-5:16 "x < 0" (<module>@36) -> 6:16-6:17 "1" (<module>@42) [if/while -> block]
ex9.py 5:11-5:16 "x < 0" (<module>@36) -> (start_line=None) (<module>@46) [(dst.start_line=None)]
ex9.py 7:9-7:10 "2" (<module>@54) -> 8:11-8:12 "x" (<module>@60) [case -> body]
ex9.py 7:9-7:10 "2" (<module>@54) -> 10:0-10:1 "x" (<module>@78) [case -> next stmt]
ex9.py 8:11-8:16 "x < 0" (<module>@68) -> 9:16-9:17 "1" (<module>@74) [if/while -> block]
ex9.py 8:11-8:16 "x < 0" (<module>@68) -> 10:0-10:1 "x" (<module>@78) [if/while -> next stmt]
This may be related to #123044.
CPython versions tested on:
CPython main branch
Operating systems tested on:
macOS