We are excited to announce the release of the Solidity Compiler v0.8.38!
This release fixes a security bug in the Yul optimizer, along with a few other bugfixes. In addition, it prepares for the upcoming Glamsterdam EVM fork, improves Yul optimizer performance, and slightly reduces the dispatch cost in the via IR pipeline.
Changelog
Important Bugfixes:
- Yul Optimizer: Fix knowledge about storage/memory address relations going stale in the
DataFlowAnalyzerafter a variable is reassigned in Yul, which could causeLoadResolverto replace loads with outdated values andEqualStoreEliminatorto remove needed stores.
Compiler Features:
- Commandline Interface: Remove the experimental
--yul-cfg-jsonoutput. - Commandline Interface: Selecting an ethdebug output no longer implicitly enables the
ethdebugandast-idcomponents of--debug-info; withoutethdebugin the selection the--ethdebug-programand--ethdebug-program-runtimeoutputs carry no semantic debug info. - Standard JSON Interface: Remove the experimental
yulCFGJsonoutput. - Standard JSON Interface: Selecting an ethdebug output no longer implicitly enables the
ethdebugandast-idcomponents ofsettings.debug.debugInfo; withoutethdebugin the selection theevm.bytecode.ethdebugandevm.deployedBytecode.ethdebugoutputs carry no semantic debug info. - Yul Analyzer: Warn about
swapn,dupnandexchangebeing used as identifiers, since they are going to be reserved identifiers starting from the Amsterdam EVM version. - Yul IR Code Generation: Use
gt(calldatasize(), 3)instead ofiszero(lt(calldatasize(), 4))in the external dispatch routine of IR codegen, saving one instruction per external call. - Yul Optimizer: Improve performance of
DataFlowAnalyzerusing flat hash containers.
Bugfixes:
- EVM Assembly Import: Fix target EVM version being ignored when assembling imported experimental EVM assembly JSON.
- Parser: Fix inverted version pragma range comparison for components in the range [231, 232).
- Yul Parser: Fix
@use-srcsource indices that are not decimal numbers being silently truncated instead of rejected.
Build System:
- Switch from C++20 to C++23 as the target standard.
- Update emscripten to version 3.1.54.
- Update minimum version requirement of Clang to 19.1.1.
Solc-Js:
- The wrapper now requires at least nodejs v16.
We would especially like to thank all the contributors that made this release possible:
ADou, Daeho Ro, Dmitry Rantovov, Faisal Firdani, Ferit, Kamil Śliwak, Mate Soos @ Argot, Matheus Aguiar, Nikola Matić, Philippe Laporte, PranaliPathak04, RAHUL KUMAR, Sean Billig, blishko, cdinhosbc98-cell, clonker, djole, dxo, jstcz, kediyalua, r0qs, riba2534, rodiazet,