Add support for MCS 2.6.4 pinned region with array variable#3110
Closed
ElektroKill wants to merge 3 commits intoicsharpcode:masterfrom
Closed
Add support for MCS 2.6.4 pinned region with array variable#3110ElektroKill wants to merge 3 commits intoicsharpcode:masterfrom
ElektroKill wants to merge 3 commits intoicsharpcode:masterfrom
Conversation
dgrunwald
reviewed
Nov 15, 2023
| trueInstr is Branch trueBr && trueBr.TargetContainer == sourceContainer && | ||
| reachedEdgesPerBlock[trueBr.TargetBlock.ChildIndex] == 0) | ||
| { | ||
| unpinBlock = trueBr.TargetBlock; |
Member
There was a problem hiding this comment.
If I understand correctly, the point of this change is to check both outgoing edges for an if block?
Should innerBlock.Instructions.Count == 2 be innerBlock.Instructions.Count >= 2 instead?
Contributor
Author
There was a problem hiding this comment.
Yes, I used == 2 since in my testing there were always two instructions with one being an if and the second being the fallthrough br. If we were to extend the limit to more than 2 instructions I think it would be necessary to check other instructions for potential outgoing edges which would mean additional logic. though in my testing it seems that the current code is enough.
mattsh247
pushed a commit
to mattsh247/ILSpy
that referenced
this pull request
Jul 30, 2024
…ray variable * Added additional code to remove the conv instruction present in the initialization part of the pinned region. * Extended the code responsible for removing the unpin stloc to correctly match the inverted condition found in MCS 2.6.4 compiled code. * Enabled already present correctness test to run for MCS 2.6.4. This is a more generalized version of the fix on PR icsharpcode#3110 proposed by @ElektroKill.
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Link to issue(s) this covers:
N/A
Problem
The decompiler did not support decompiling pinned regions with array variables when the compiler used was MCS 2.6.4.
Before:
After:
Solution
convinstruction present in the initialization part of the pinned region.stlocto correctly match the inverted condition found in MCS 2.6.4 compiled code.