Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
0a20ab6
Revert "Remove `unreachable-code` feature (#9463)"
augustelalande Apr 11, 2024
4a716d6
remove feature gate
augustelalande Apr 11, 2024
b615c91
fix up
augustelalande Apr 11, 2024
a8023c5
mark preview
augustelalande Apr 11, 2024
ddaaee4
Implement post_processing to handle `break` and `continue` in loops w…
augustelalande Apr 13, 2024
b8ca509
Always get an after_block to avoid having to get one for each branch …
augustelalande Apr 14, 2024
64dbcc3
Fix #8958
augustelalande Apr 15, 2024
97aa6f0
fix infinite recursion
augustelalande Apr 15, 2024
ef0a913
Always close the loop
augustelalande Apr 15, 2024
cc3b083
fix handling of asserts in postprocessing
augustelalande Apr 16, 2024
0afcafa
initial implementation of try statement handling
augustelalande Apr 17, 2024
cc56b59
clean up docs
augustelalande Apr 20, 2024
ede5312
always process finally
augustelalande Apr 21, 2024
439bf09
these were fixed
augustelalande Apr 21, 2024
c293600
add cfg tests for try
augustelalande Apr 21, 2024
0b9512a
clippy
augustelalande Apr 21, 2024
91be932
execute blank `except` unconditionally
augustelalande Apr 21, 2024
a1e1fbf
process with statements
augustelalande Apr 21, 2024
1d97810
this was fixed
augustelalande Apr 21, 2024
91da715
maybe fall through with statement on error
augustelalande Apr 21, 2024
4978d06
remove `force_next_block` which would change the flow incorrectly
augustelalande Apr 21, 2024
619d710
improve processing of finallys
augustelalande Apr 22, 2024
97d560e
Fix clippy warnings
MichaReiser Aug 5, 2024
e8c7ebb
update message
augustelalande Aug 26, 2024
6c450c2
remove bitmap, use a flag on the blocks themselves
augustelalande Aug 26, 2024
f7e1e21
clippy
augustelalande Aug 26, 2024
acb07bb
add nested for loop tests with break and continue
augustelalande Aug 26, 2024
6536e43
add comments for post_processing
augustelalande Aug 26, 2024
d3807aa
highlight all statements in block
augustelalande Aug 26, 2024
2d76c51
fix overflow error, although this exposes another issue; will fix later
augustelalande Aug 27, 2024
64c9233
use BasicBlockKind
augustelalande Sep 5, 2024
e212ee3
do not re-use exception blocks for proper handling of finally
augustelalande Sep 5, 2024
b066bec
add another test case
augustelalande Sep 5, 2024
c96743e
clippy
augustelalande Sep 5, 2024
3f58cac
simplify handling of match statements
augustelalande Sep 5, 2024
902c123
rename conditions
augustelalande Sep 5, 2024
153c3b0
improve documentation
augustelalande Sep 5, 2024
be78736
don't assume loop body has any statements
augustelalande Sep 5, 2024
90d0551
format
augustelalande Sep 5, 2024
63efc1c
documentation
augustelalande Sep 5, 2024
fa84ffa
clippy
augustelalande Sep 5, 2024
1417363
merge blocks
augustelalande Aug 26, 2024
6a2be73
combine nearby violations into one
augustelalande Sep 5, 2024
70c414c
clippy
augustelalande Sep 5, 2024
c207f4c
sort by range start
augustelalande Sep 5, 2024
700b732
clippy
augustelalande Sep 5, 2024
902d641
use ViolationMetadata derive macro
dylwil3 Jan 2, 2025
5901292
clippy
dylwil3 Jan 2, 2025
9d47451
more aggressive clippy
dylwil3 Jan 2, 2025
d13ff6a
move rule to pylint
dylwil3 Jan 3, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
do not re-use exception blocks for proper handling of finally
  • Loading branch information
augustelalande authored and dylwil3 committed Jan 2, 2025
commit e212ee310f2015077a01956921e40d24f0dc3df4
Original file line number Diff line number Diff line change
Expand Up @@ -112,14 +112,18 @@ flowchart TD
block0[["`*(empty)*`"]]
block1[["Exception raised"]]
block2["assert y < 3\n"]
block3["assert y > 1\n"]
block4["y = 2\nassert y == 2\n"]
block3[["Exception raised"]]
block4["assert y > 1\n"]
block5[["Exception raised"]]
block6["y = 2\nassert y == 2\n"]

start --> block4
block4 -- "y == 2" --> block3
block4 -- "else" --> block1
block3 -- "y > 1" --> block2
block3 -- "else" --> block1
start --> block6
block6 -- "y == 2" --> block4
block6 -- "else" --> block5
block5 --> return
block4 -- "y > 1" --> block2
block4 -- "else" --> block3
block3 --> return
block2 -- "y < 3" --> block0
block2 -- "else" --> block1
block1 --> return
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -379,26 +379,28 @@ flowchart TD
block2["raise Exception()\n"]
block3[["Loop continue"]]
block4["break\n"]
block5["assert i is not None\n"]
block6["if i == 2:
block5[["Exception raised"]]
block6["assert i is not None\n"]
block7["if i == 2:
assert i is not None
break\n"]
block7["for i in range(3):
block8["for i in range(3):
if i == 2:
assert i is not None
break
else:
raise Exception()\n"]

start --> block7
block7 -- "range(3)" --> block6
block7 -- "else" --> block2
block6 -- "i == 2" --> block5
block6 -- "else" --> block3
block5 -- "i is not None" --> block4
block5 -- "else" --> block1
start --> block8
block8 -- "range(3)" --> block7
block8 -- "else" --> block2
block7 -- "i == 2" --> block6
block7 -- "else" --> block3
block6 -- "i is not None" --> block4
block6 -- "else" --> block5
block5 --> return
block4 --> block0
block3 --> block7
block3 --> block8
block2 --> block1
block1 --> return
block0 --> return
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ flowchart TD
block6 -- "OtherException" --> block5
block6 -- "else" --> block4
block5 --> block1
block4 --> return
block4 --> block1
block3 --> block2
block2 --> block1
block1 --> block0
Expand Down Expand Up @@ -304,7 +304,7 @@ flowchart TD
start --> block4
block4 -- "Exception raised" --> block3
block4 -- "else" --> block2
block3 --> return
block3 --> block1
block2 --> block1
block1 --> block0
block0 --> return
Expand Down Expand Up @@ -343,7 +343,7 @@ flowchart TD
block5 -- "Exception raised" --> block4
block5 -- "else" --> block2
block4 --> block1
block3 --> return
block3 --> block1
block2 --> block1
block1 --> return
block0 --> return
Expand All @@ -367,17 +367,19 @@ flowchart TD
block0[["`*(empty)*`"]]
block1[["Exception raised"]]
block2["raise Exception()\n"]
block3["print(#quot;reached#quot;)\n"]
block4["try:
block3[["Exception raised"]]
block4["print(#quot;reached#quot;)\n"]
block5["try:
raise Exception()
except:
print(#quot;reached#quot;)\n"]

start --> block4
block4 -- "Exception raised" --> block3
block4 -- "else" --> block2
block3 --> block0
block2 --> block3
start --> block5
block5 -- "Exception raised" --> block4
block5 -- "else" --> block2
block4 --> block0
block3 --> return
block2 --> block4
block1 --> return
block0 --> return
```
Expand All @@ -402,19 +404,21 @@ flowchart TD
block1["print(#quot;unreachable#quot;)\n"]
block2[["Exception raised"]]
block3["assert False\n"]
block4["print(#quot;reached#quot;)\n"]
block5["try:
block4[["Exception raised"]]
block5["print(#quot;reached#quot;)\n"]
block6["try:
assert False
print(#quot;unreachable#quot;)
except:
print(#quot;reached#quot;)\n"]

start --> block5
block5 -- "Exception raised" --> block4
block5 -- "else" --> block3
block4 --> block0
start --> block6
block6 -- "Exception raised" --> block5
block6 -- "else" --> block3
block5 --> block0
block4 --> return
block3 -- "False" --> block1
block3 -- "else" --> block4
block3 -- "else" --> block5
block2 --> return
block1 --> block0
block0 --> return
Expand All @@ -440,15 +444,17 @@ flowchart TD
block1["print('reached')\nreturn 2\n"]
block2[["Exception raised"]]
block3["raise Exception()\n"]
block4["try:
block4[["Exception raised"]]
block5["try:
raise Exception()
finally:
print('reached')
return 2\n"]

start --> block4
block4 -- "Exception raised" --> block2
block4 -- "else" --> block3
start --> block5
block5 -- "Exception raised" --> block4
block5 -- "else" --> block3
block4 --> block1
block3 --> block1
block2 --> return
block1 --> return
Expand Down Expand Up @@ -476,15 +482,17 @@ flowchart TD
block2["print(#quot;unreachable#quot;)\n"]
block3[["Exception raised"]]
block4["assert False\n"]
block5["try:
block5[["Exception raised"]]
block6["try:
assert False
print(#quot;unreachable#quot;)
finally:
print(#quot;reached#quot;)\n"]

start --> block5
block5 -- "Exception raised" --> block3
block5 -- "else" --> block4
start --> block6
block6 -- "Exception raised" --> block5
block6 -- "else" --> block4
block5 --> block1
block4 -- "False" --> block2
block4 -- "else" --> block1
block3 --> return
Expand Down Expand Up @@ -538,47 +546,51 @@ flowchart TD
except PySparkParseException:
x = 7\n"]
block6["x = 4\n"]
block7["x = 5\n"]
block8["try:
block7[["Exception raised"]]
block8["x = 5\n"]
block9["try:
x = 4
except PySparkParseException:
x = 5\n"]
block9["try:
block10["try:
x = 4
except PySparkParseException:
x = 5\n"]
block10["if catalog is not None:
block11["if catalog is not None:
try:
x = 4
except PySparkParseException:
x = 5\n"]
block11["x = 8\n"]
block12["x = 2\n"]
block13["x = 3\n"]
block14["try:
block12["x = 8\n"]
block13["x = 2\n"]
block14[["Exception raised"]]
block15["x = 3\n"]
block16["try:
x = 2
except PySparkParseException:
x = 3\n"]
block15["try:
block17["try:
x = 2
except PySparkParseException:
x = 3\n"]
block16["x = 0\n"]
block17["x = 1\n"]
block18["try:
block18["x = 0\n"]
block19[["Exception raised"]]
block20["x = 1\n"]
block21["try:
x = 0
except PySparkParseException:
x = 1\n"]
block19["try:
block22["try:
x = 0
except PySparkParseException:
x = 1\n"]
block20["if catalog is not None:
block23["if catalog is not None:
try:
x = 0
except PySparkParseException:
x = 1\n"]
block21["try:
block24[["Exception raised"]]
block25["try:
if catalog is not None:
try:
x = 0
Expand All @@ -600,38 +612,42 @@ flowchart TD
except PySparkParseException:
x = 7\n"]

start --> block21
block21 -- "Exception raised" --> block2
block21 -- "else" --> block20
block20 -- "catalog is not None" --> block19
block20 -- "else" --> block15
block19 -- "Exception raised" --> block18
block19 -- "else" --> block16
block18 -- "PySparkParseException" --> block17
block18 -- "else" --> block2
block17 --> block15
block16 --> block15
block15 -- "Exception raised" --> block14
block15 -- "else" --> block12
block14 -- "PySparkParseException" --> block13
block14 -- "else" --> block2
block13 --> block11
start --> block25
block25 -- "Exception raised" --> block24
block25 -- "else" --> block23
block24 --> block11
block23 -- "catalog is not None" --> block22
block23 -- "else" --> block17
block22 -- "Exception raised" --> block21
block22 -- "else" --> block18
block21 -- "PySparkParseException" --> block20
block21 -- "else" --> block19
block20 --> block17
block19 --> block11
block18 --> block17
block17 -- "Exception raised" --> block16
block17 -- "else" --> block13
block16 -- "PySparkParseException" --> block15
block16 -- "else" --> block14
block15 --> block12
block14 --> block11
block13 --> block12
block12 --> block11
block11 --> block10
block10 -- "catalog is not None" --> block9
block10 -- "else" --> block5
block9 -- "Exception raised" --> block8
block9 -- "else" --> block6
block8 -- "PySparkParseException" --> block7
block8 -- "else" --> block2
block7 --> block5
block11 -- "catalog is not None" --> block10
block11 -- "else" --> block5
block10 -- "Exception raised" --> block9
block10 -- "else" --> block6
block9 -- "PySparkParseException" --> block8
block9 -- "else" --> block7
block8 --> block5
block7 --> return
block6 --> block5
block5 -- "Exception raised" --> block4
block5 -- "else" --> block1
block4 -- "PySparkParseException" --> block3
block4 -- "else" --> block2
block3 --> block0
block2 --> block10
block2 --> return
block1 --> block0
block0 --> return
```
Loading