The release is still in progress. You may see broken links and binaries may not yet be available from all sources.
We are excited to announce the release of the Solidity Compiler v0.8.37!
This release fixes a substantial amount of bugs, two of them classified as important security fixes. In addition, it introduces further support for the upcoming Glamsterdam EVM fork, as well as some performance optimizations, both in the default and the via IR pipelines.
Changelog
Important Bugfixes:
- Code Generator: Fix
deleteapplied to an element of abytesarray in memory zeroing the whole 32-byte word starting at the element's location instead of only the element's byte. - Yul IR Code Generation: Encode custom error named parameters in declaration order instead of call-site order when used from a
requirefunction. - Yul Optimizer: Fix too few memory slots being reserved when moving local variables to memory to work around stack-too-deep errors in code containing mutually recursive functions. Variables of two functions that can be active at the same time could be assigned the same slot, silently overwriting one of them while it was still in use.
Language Features:
- Custom Storage Layout: Allow signed positive expressions.
- EVM: Support
block.slotnumto access the beacon chain slot number of the current block, available since the Amsterdam EVM version (EIP-7843). - Yul: Introduce builtin
slotnum()for theSLOTNUMopcode, available since the Amsterdam EVM version (EIP-7843).
Compiler Features:
- Commandline Interface: Remove support for the experimental Language Server Protocol (LSP) mode.
- EVM: Deprecate support for "constantinople", "petersburg", "istanbul" and "berlin" EVM versions.
- Evmasm Optimizer: Improve performance of block deduplicator.
- General: Improve performance throughout the compiler using Boost's flat versions of unordered set and map.
- General: Remove support for the experimental Generic Solidity prototype (
pragma experimental solidity). - General: Replace the current greedy stack shuffler in the experimental SSA CFG pipeline with a planning one.
- SMTChecker: Emit a deprecation warning for the BMC engine.
- SMTChecker: Support
block.slotnum. - Yul Optimizer:
LoopInvariantCodeMotioncan now move expressions depending on function parameters out of loops. - Yul Optimizer:
UnusedStoreEliminatorcan now recognize redundant memory and storage operations whose start offset or length is a function parameter. - Yul Optimizer: Remove the ineffective elimination of unused
returndatacopy()operations in simple cases from UnusedStoreEliminator.
Bugfixes:
- Code Generator: Fix constants read in both checked and
uncheckedcontexts within one contract getting the checked/unchecked semantics of whichever read was generated first via IR, which could remove a required overflow panic or introduce a spurious one. - Code Generator: Fix ICE on parenthesized custom error construction in require statement.
- Code Generator: Fix uninitialized internal function pointers being read from a packed storage slot with the wrong value when a subsequent variable in the slot holds a non-zero value.
- Commandline Interface: Reject
--model-checker-ext-callsin unsupported input modes instead of silently ignoring it. - Commandline Interface: Report proper error instead of ICE on non-hex mixed-case address value given via
--libraries. - Standard JSON Interface: Fix the entire output being replaced by a
JSONError("Error writing output JSON.") when an error message quotes a long source line and truncating it splits a multi-byte character. - Type Checker: Report an unimplemented feature error instead of ICE when a variable of a fixed point type is accessed in inline assembly.
- Yul Optimizer: Fix incorrect removal of
returndatacopy()operations referencing a stale result ofreturndatasize().
Build System:
- Update minimum version requirement of Boost to 1.83.0 for Windows build. This matches the minimum version for other systems.
We would especially like to thank all the contributors that made this release possible:
Kaan Uzdoğan, Kamil Śliwak, Matheus Aguiar, Nikola Matić, Qazawat Zirak, Sayed Kaif, Shivam Kumar, blishko, clonker, cuishuang, djole, intrigus-lgtm, rodiazet, sbillig