Fix stack distribution issues #26
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.
This PR fixes two issues that caused invalid stack distribution and compiled program termination on Mono (see #25).
First, the invalid
ldnull; retsequence was generated forint Main()method. I've replacedint Mainwithvoid Mainfor now and removed the finalldnullgeneration for any void-returning methods.(We'll review the possible ways of defining
Mainmethod signatures later, but currently it's the simplest solution to fix the bug.)Second, invalid stack distribution was generated by so-called "reduced if" form generator (the
ifstatement with only one branch) if the branch contained onlyvoidinstructions:ngccreated dummyldnullinstruction for the missing branch that caused stack imbalance. I've removed thatldnullfor cases when there is only a void-typed expression in the reduced if body. There are other possible bugs with structural (e.g.int,floatetc.) types there, but we'll sort that later.Closes #25.