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.


  • 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.


  • 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.