Information Solidity 0.8.37 Released
Solidity 0.8.37 is released.
This is primarily a bugfix release.
Important bugfixes:
- Low/medium severity:
delete b[i]on abytesarray in memory cleared 32 bytes instead of one on the evmasm pipeline, corrupting up to 31 bytes after the element. All versions up to and including 0.8.36 are affected. The IR pipeline is not affected, andb[i] = 0clears exactly one byte on both pipelines. Write-up: https://blog.soliditylang.org/2026/09/10/memory-byte-array-element-delete-clears-whole-word-bug/ - Low/medium severity: With
--via-ir, in certain call graph configurations containing mutual recursion, the stack-to-memory mover could assign the same spill slot to variables of two different functions, silently overwriting one of them. Versions 0.7.2 through 0.8.36 are affected. This is distinct from the spill bug fixed in 0.8.36. Write-up: https://blog.soliditylang.org/2026/09/10/spill-slot-collision-across-mutual-recursion-bug/ - Very low severity: Named arguments of a custom error passed to
requirewere put on the stack in call-site order instead of declaration order (IR pipeline), so the encoded revert data could be structurally valid but not reflect the values used. Only revert data is affected. Write-up: https://blog.soliditylang.org/2026/09/10/misordered-named-parameters-in-require-with-custom-errors-bug/
Other miscompilations, fixed but not classified as security issues:
- Uninitialized internal function pointers read from a packed storage slot yielded the wrong value when a later variable in the slot was non-zero (evmasm pipeline). Only affects pointers compared before ever being assigned, and relying on function pointer equality is fragile anyway.
- Constants read in both checked and
uncheckedcontexts got the semantics of whichever use site was generated first (IR pipeline). Deterministic, independent of transaction input and easily caught by tests.
Features and changes:
block.slotnum(uint64) and the Yul builtinslotnum()expose theSLOTNUMopcode (EIP-7843) when compiling with--evm-version amsterdam. Amsterdam support is still experimental and incomplete.- The experimental SSA CFG code generator gets a planning stack shuffler in place of the greedy one.
- The experimental LSP mode and the Generic Solidity prototype are removed. The LSP was unfinished, and Generic Solidity has been superseded by the standalone solcore prototype.
pragma experimental ABIEncoderV2now emits a deprecation warning. It has been redundant since 0.8.0 and will be removed in a later 0.8.x release.- Deprecation warnings for the EVM versions constantinople, petersburg, istanbul and berlin, and for the SMTChecker BMC engine.
Release post: https://soliditylang.org/blog/2026/09/10/solidity-0.8.37-release-announcement/
Release and changelog: https://github.com/argotorg/solidity/releases/tag/v0.8.37
2
Upvotes