C#: Restrict post-dominance to normal execution #4575
Merged
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.
Overview
As discussed several times with @aschackmull, post-dominance makes more sense when restricted to paths that leave the callable normally, that is, without throwing an exception or halting.
For example, in
the call
Console.WriteLine(s)will happen on all normal paths throughM3, so we want it to post-dominate the entry point.Implementation
Before this PR, the CFG for

M3wasand post-dominance was defined in terms of the
exit M3node.This PR changes the CFG for

M3toand redefines post-dominance with respect to the new
exit M3 (normal)node that represents normal execution (highlighted in red).Note that each callable will still have a unique exit node, which is reached from the two new normal/abnormal exit nodes: this is for backwards compatibility, and so that we can recover the old post-dominance logic, if needed.
CSharp-Differences here.