Skip to content

Treat states after return, break, and continue as dead - #2556

Open
mohitt31 wants to merge 4 commits into
spcl:mainfrom
mohitt31:dse-terminator-blocks
Open

Treat states after return, break, and continue as dead#2556
mohitt31 wants to merge 4 commits into
spcl:mainfrom
mohitt31:dse-terminator-blocks

Conversation

@mohitt31

@mohitt31 mohitt31 commented Sep 6, 2026

Copy link
Copy Markdown

DeadStateElimination walks the CFG from the start block and follows the edges out of ReturnBlock, BreakBlock and ContinueBlock, so whatever sits after one of them still counts as reachable. Control flow does not continue past those blocks, so those states are dead and should go.

The fix is to stop the traversal when it reaches one of the three. Anything reachable only through them then falls out of the visited set and gets removed the same way as any other unreachable block.

Tests cover a return at the top level, and a break and a continue inside a loop region. There is also a test where a state is reachable both through the return and around it, so the pass has to keep it. That one passes before the change as well, it is there to catch the traversal being cut too early.

Closes #2051.

@acalotoiu
acalotoiu enabled auto-merge September 7, 2026 12:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Make DeadStateElimination eliminate after return / break / continue blocks

2 participants