fix: redundant memory store statements for static variables #10
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.
Bug description :
Declaring static variables in the main function would result in WASM memory access out of bounds error.
In sourceacademy playground it would show index out of bounds
Sample code to reproduce the issue :
Root cause :
Compiler consider local scope static variables as normal variables and write memory store statements for each static variable declaration and attempt to store the assigned values into bp + address of that static variable which would result in out of bounds error in specific cases.
For instance, the example mentioned would have this line of code in WAT code which should not have been included in the code :
(i32.store (i32.add (global.get $bp) (i32.const 0))
0 is the address of the defined static variable.
Solution :
Adding condition in local declaration processes to pass data segment variable declarations for adding memory statements.
Test cases:
I already ran all the written test cases and all of them were passed.