Apart from further invisible work on the Yul optimizer, the Solidity to Yul code generation, the eWasm backend and the SMT checker, this release contains two important bug fixes related to storage arrays.

For details see our earlier blog post.

It also contains an experimental mode that allows recovery from parser error (implemented by @rocky, funded by ConsenSys) in the hope that this might be useful for IDE developers.

Important Bugfixes:

  • ABIEncoderV2: Fix incorrect abi encoding of storage array of data type that occupy multiple storage slots
  • Code Generator: Properly zero out higher order bits in elements of an array of negative numbers when assigning to storage and converting the type at the same time.

Compiler Features:

  • Commandline Interface: Experimental parser error recovery via the error-recovery commandline switch.
  • Optimizer: Add rule to simplify SUB(~0, X) to NOT(X).
  • Yul Optimizer: Make the optimizer work for all dialects of Yul including eWasm.

Bugfixes:

  • Type Checker: Set state mutability of the function type members gas and value to pure (while their return type inherits state mutability from the function type).
  • Yul / Inline Assembly Parser: Disallow trailing commas in function call arguments.

Build System:

  • Attempt to use stock Z3 cmake files to find Z3 and only fall back to manual discovery.
  • CMake: use imported targets for boost.
  • Emscripten build: upgrade to boost 1.70.
  • Generate a cmake error for gcc versions older than 5.0.

A big thank you to all contributors who helped make this release possible!

Download the new version of Solidity here.