-
Notifications
You must be signed in to change notification settings - Fork 217
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
Unused variable detection #429
Unused variable detection #429
Conversation
899c925
to
524d119
Compare
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.
Looks great! Just some minor comments, I think other than some details it looks god.
I would say it is good practise to write tests as are you coding, so you have all the edge cases in mind and don't forget about them when writing tests.
Also please squash all your work into a single commit once you are done - or a few commits if each commit makes logical sense. |
571b295
to
5c2b19b
Compare
Signed-off-by: LucasSte <lucas.tnagel@gmail.com>
e3a2cee
to
8edac3e
Compare
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.
Fantastic work! I have some very minor comments.
Please also note that the clippy warnings need to be fixed. You can probably enable clippy in your ide.
2f71a12
to
797ba4e
Compare
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.
Looks good, just a few very minor comments.
154e261
to
0e14dac
Compare
Would you mind rebasing against latest main, so it can be merged and also squashing the commits into one. Thanks. |
Signed-off-by: LucasSte <lucas.tnagel@gmail.com>
d8c83ba
to
76e520c
Compare
I left two commits: one for the code itself and another for the tests. |
Added - Added a strength reduce pass to eliminate 256/128 bit multiply, division, and modulo where possible. - Visual Studio Code extension can download the Solang binary from github releases, so the user is not required to download it themselves - The Solana target now has support for arrays and mapping in contract storage - The Solana target has support for the keccak256(), ripemd160(), and sha256() builtin hash functions. - The Solana target has support for the builtins this and block.timestamp. - Implement abi.encodePacked() for the ethereum abi encoder - The Solana target now compiles all contracts to a single `bundle.so` BPF program. - Any unused variables, events, or contract variables are now detected and warnings are given, thanks to [LucasSte](hyperledger-solang#429) - The `immutable` attribute on contract storage variables is now supported. - The `override` attribute on public contract storage variables is now supported. - The `unchecked {}` code block is now parsed and supported. Math overflow still is unsupported for types larger than 64 bit. - `assembly {}` blocks are now parsed and give a friendly error message. - Any variable use before it is given a value is now detected and results in a undefined variable diagnostic, thanks to [LucasSte](hyperledger-solang#468) Changed - Solang now uses LLVM 12.0, based on the [Solana LLVM tree](https://github.com/solana-labs/llvm-project/) Fixed - Fix a number of issues with parsing the uniswap v2 contracts - ewasm: staticcall() and delegatecall() cannot take value argument - Fixed array support in the ethereum abi encoder and decoder - Fixed issues in arithmetic on non-power-of-2 types (e.g. uint112) Signed-off-by: Sean Young <sean@mess.org>
Added - Added a strength reduce pass to eliminate 256/128 bit multiply, division, and modulo where possible. - Visual Studio Code extension can download the Solang binary from github releases, so the user is not required to download it themselves - The Solana target now has support for arrays and mapping in contract storage - The Solana target has support for the keccak256(), ripemd160(), and sha256() builtin hash functions. - The Solana target has support for the builtins this and block.timestamp. - Implement abi.encodePacked() for the ethereum abi encoder - The Solana target now compiles all contracts to a single `bundle.so` BPF program. - Any unused variables, events, or contract variables are now detected and warnings are given, thanks to [LucasSte](#429) - The `immutable` attribute on contract storage variables is now supported. - The `override` attribute on public contract storage variables is now supported. - The `unchecked {}` code block is now parsed and supported. Math overflow still is unsupported for types larger than 64 bit. - `assembly {}` blocks are now parsed and give a friendly error message. - Any variable use before it is given a value is now detected and results in a undefined variable diagnostic, thanks to [LucasSte](#468) Changed - Solang now uses LLVM 12.0, based on the [Solana LLVM tree](https://github.com/solana-labs/llvm-project/) Fixed - Fix a number of issues with parsing the uniswap v2 contracts - ewasm: staticcall() and delegatecall() cannot take value argument - Fixed array support in the ethereum abi encoder and decoder - Fixed issues in arithmetic on non-power-of-2 types (e.g. uint112) Signed-off-by: Sean Young <sean@mess.org>
This pull request implements unused variable detection for the Solang compiler.
It generates warnings for unused state variables, global constants and contract storage.
As a bonus, I implemented the detection of events that have never been emitted.
This PR also implements tests for the new code.
This is the first milestone for the Linux Foundation mentorship on the Solang compiler.
For more information, please refer to the project plan.