-
Notifications
You must be signed in to change notification settings - Fork 835
[EH] Fix missing outer block for catchless try #6519
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 1 commit
Commits
Show all changes
4 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why was this outer block needed?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Before we go into actually processing
catches anddelegates, we create an outer block in this condition:binaryen/src/passes/TranslateEH.cpp
Line 677 in 219e668
Because
In case of a
delegate, it will be translated into athrow_refto the delegate target. But when an exception does not occur, we have to bail out of thatthrow_ref. And this outer block is that bail-out destination. It is explained here:binaryen/src/passes/TranslateEH.cpp
Line 251 in e50a2ba
binaryen/src/passes/TranslateEH.cpp
Line 267 in e50a2ba
In case of
catches, we proceed into catch handler parts unless we bail out in case an exception does not occur. It is explained here:binaryen/src/passes/TranslateEH.cpp
Line 415 in e50a2ba
binaryen/src/passes/TranslateEH.cpp
Line 436 in e50a2ba
But this test does not need a
brbecause the body's type is unreachable due to areturn. We omit thatbrhere:binaryen/src/passes/TranslateEH.cpp
Lines 298 to 300 in e50a2ba
It is hard to check this condition before creating an outer block. We can run
BranchSeekerto find out if the block is actually used as a destination for a branch afterwards to remove this unnecessary block. Do you want me to do that? It is not hard, but I didn't end up doing that because we might be adding too much optimization in this pass which should ideally be done by other passes later. Currently we run this pass at the end and don't run any other optimization passes after this, I already baked some amount of optimization into it though.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tried removing it without using
BranchSeeker: 8c8fcc5