This release mainly fixes an optimizer bug related to multiple shift opcodes that was introduced in the previous release. It is unlikely that any existing contracts are affected, but you should still not use Solidity 0.5.5.
Apart from that, the support for calldata structs and arrays by ABIEncoderV2 is almost finished now, we added some more optimizer rules and added enums and one-dimensional arrays to the SMT checker.
- Yul Optimizer: Fix visitation order bug for the structural simplifier.
- Optimizer: Fix overflow in optimization rule that simplifies double shift by constant.
- Allow calldata arrays with dynamically encoded base types with ABIEncoderV2.
- Allow dynamically encoded calldata structs with ABIEncoderV2.
- Optimizer: Add rules for lt-comparisons with constants.
- Peephole Optimizer: Remove double iszero before jumpi.
- SMTChecker: Support enums without typecast.
- SMTChecker: Support one-dimensional arrays.
- Type Checker: Provide better error messages for some literal conversions.
- Yul Optimizer: Add rule to remove empty default switch cases.
- Yul Optimizer: Add rule to remove empty cases if no default exists.
- Yul Optimizer: Add rule to replace a switch with no cases with pop(expression).
- JSON ABI: Json description of library ABIs no longer contains functions with internal types like storage structs.
- SMTChecker: Fix internal compiler error when contract contains too large rational number.
- Type system: Detect if a contract's base uses types that require the experimental abi encoder while the contract still uses the old encoder.
- Soltest: Add support for arrays in function signatures.
- Soltest: Add support for struct arrays in function signatures.
A big thank you to all contributors who helped make this release possible!
Download the new version of Solidity here.