Skip to content

Version 0.8.27

Compare
Choose a tag to compare
@nikola-matic nikola-matic released this 04 Sep 08:35
· 400 commits to develop since this release
40a35a0

Introducing the newest version of the Solidity Compiler!

We are excited to announce the release of the Solidity Compiler Solidity v0.8.27. We've got some exciting new features this time around as well - likely the most anticipated being the support for require with custom errors in the legacy pipeline, which was previously only supported with via IR. On the topic of via IR, we have also made some efficiency improvements with regards to compilation times, namely the caching of already optimized IR, and the re-use thereof. Apart from these, we've also fixed quite a few bugs, added some minor convenience features, and are continuing our work on high-level transient storage support.

Changelog

Language Features:

  • Accept declarations of state variables with transient data location (parser support only, no code generation yet).
  • Make require(bool, Error) available when using the legacy pipeline.
  • Yul: Parsing rules for source location comments have been relaxed: Whitespace between the location components as well as single-quoted code snippets are now allowed.

Compiler Features:

  • Commandline Interface: Add --transient-storage-layout output.
  • Commandline Interface: Allow the use of --asm-json output option in assembler mode to export EVM assembly of the contracts in JSON format.
  • Commandline Interface: Do not perform IR optimization when only unoptimized IR is requested.
  • Constant Optimizer: Uses PUSH0 if supported by the selected evm version.
  • Error Reporting: Unimplemented features are now properly reported as errors instead of being handled as if they were bugs.
  • EVM: Support for the EVM version "Prague".
  • Peephole Optimizer: PUSH0, when supported, is duplicated explicitly instead of using DUP1.
  • Peephole Optimizer: Remove identical code snippets that terminate the control flow if they occur one after another.
  • SMTChecker: Add CHC engine check for underflow and overflow in unary minus operation.
  • SMTChecker: Replace CVC4 as a possible BMC backend with cvc5.
  • Standard JSON Interface: Add transientStorageLayout output.
  • Standard JSON Interface: Do not perform IR optimization when only unoptimized IR is requested.
  • Yul: Drop the deprecated typed Yul dialect that was only accessible via --yul in the CLI.
  • Yul: The presence of types in untyped Yul dialects is now a parser error.
  • Yul Optimizer: Caching of optimized IR to speed up optimization of contracts with bytecode dependencies.
  • Yul Optimizer: The optimizer now treats some previously unrecognized identical literals as identical.

Bugfixes:

  • Assembler: Fix ICE caused by imprecise calculation of required size of tags in bytecode when code size is above 255.
  • Parser: Fix spuriously emitted parser error for unary plus operations when used as binary operator in some cases.
  • SMTChecker: Fix error that reports invalid number of verified checks for BMC and CHC engines.
  • SMTChecker: Fix formatting of unary minus expressions in invariants.
  • SMTChecker: Fix internal compiler error when reporting proved targets for BMC engine.
  • SMTChecker: Fix SMT logic error when assigning to an array of contracts or functions.
  • Standard JSON Interface: For Yul input, properly produce output artifacts in case of warnings.
  • TypeChecker: Fix segfault when assigning nested tuple to tuple.
  • Yul IR Code Generation: Deterministic order of Yul subobjects.
  • Yul Optimizer: Fix Yul source locations always referring to unoptimized source, even in optimized outputs.
  • Yul Optimizer: Fix warnings being generated twice when there are no errors.
  • Yul Optimizer: Name simplification could lead to forbidden identifiers with a leading and/or trailing dot, e.g., x._ would get simplified into x..
  • Yul Parser: Fix segfault when parsing very long location comments.

Build System:

  • Change build system to use git submodules for some dependencies (nlohmann-json, fmtlib & range-v3).

We especially thank all the contributors that made this release possible:
Alex Beregszaszi, Alexander Arlt, Alireza Arjmand, Ardis Lu, Bhargava Shastry, Daniel Kirchner, Daniel Zahariev, Francisco Giordano, Guilherme Ferreira, Haoyang Ma, Howe, Ikko Eltociear Ashimine, Kaan Uzdoğan, Kamil Śliwak, Martin Blicha, Matheus Aguiar, Meet Mangukiya, Moritz Hoffmann, Nikola Matić, Pawel Gebal, Tilak Madichetti, ToonVanHove, Vishwa Mehta, Zuri Obozuwa, dxo, ljmanini, r0qs, rodiazet, shafu, snoppy