[release/9.0-rc1] JIT: Remove implicit fallthrough assert in bool optimizer #106542
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Backport of #106492 to release/9.0-rc1
/cc @amanasifkhalid
Customer Impact
Recent refactors of the JIT's flowgraph implementation removed various invariants. The assert being removed by this fix enforces an invariant which no longer exists, and thus can fire for valid state. This failure was hit by Antigen, one of our fuzz test generators.
Regression
#97488 probably made this assert overzealous. That change removed logic maintaining the false target of a conditional basic block as its next block. This means it is now possible for a conditional block to be the last block in a method if both of its successors are behind it.
Testing
Triggering this assert required a pretty specific code pattern, such that a method would end with a loop with an exit condition that can be optimized, and flowgraph churn in earlier JIT phases would keep the conditional block at the end of the method. There isn't any new behavior to test here.
Risk
Low. The fix simply removes a debug assert to keep CI clean. Release builds were unaffected by this assert.