This release adds further backwards-incompatible security measures enabled via pragma experimental "v0.5.0"; and contains another important feature: You can now select to compile only certain contracts using the outputSelection field of the standard-json-io compiler interface, which should speed up tools like truffle tremendously.
There are also two important bug fixes: One was an oversight in the way bytes variables are allocated in memory and can reduce the memory requirements 32-fold. The second is a security fix: In extremely specific circumstances, it can happen that a regular function is called instead of the fallback function for an Ether transfer without data. These circumstances are: The function has to have a zero signature (one out of 4294967296), it has to be payable, the contract cannot have more than five (external) functions and it cannot have a fallback function.
Features:
- Code Generator: Always use all available gas for calls as experimental 0.5.0 feature (previously, some amount was retained in order to work in pre-Tangerine-Whistle EVM versions)
- Parser: Better error message for unexpected trailing comma in parameter lists.
- Standard JSON: Support the outputSelection field for selective compilation of supplied sources.
- Syntax Checker: Unary + is now a syntax error as experimental 0.5.0 feature.
- Type Checker: Disallow non-pure constant state variables as experimental 0.5.0 feature.
- Type Checker: Do not add members of address to contracts as experimental 0.5.0 feature.
- Type Checker: Force interface functions to be external as experimental 0.5.0 feature.
- Type Checker: Require storage or memory keyword for local variables as experimental 0.5.0 feature.
Bugfixes:
- Code Generator: Allocate one byte per memory byte array element instead of 32.
- Code Generator: Do not accept data with less than four bytes (truncated function signature) for regular function calls - fallback function is invoked instead.
- Optimizer: Remove unused stack computation results.
- Parser: Fix source location of VariableDeclarationStatement.
- Type Checker: Allow gas in view functions.
- Type Checker: Do not mark event parameters as shadowing state variables.
- Type Checker: Prevent duplicate event declarations.
- Type Checker: Properly check array length and don't rely on an assertion in code generation.
- Type Checker: Properly support overwriting members inherited from address in a contract (such as balance, transfer, etc.)
- Type Checker: Validate each number literal in tuple expressions even if they are not assigned from.
A big thank you to all contributors who helped make this release possible!
Download the new version of Solidity here.