Repository navigation
Releases: argotorg/solidity
Release list
Version 0.8.37
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
Version 0.8.36
We are excited to announce the release of the Solidity Compiler v0.8.36!
This release fixes some important bugs, introduces support for the upcoming EVM version Amsterdam, as well as memory spilling for our new and experimental SSA CFG pipeline.
Changelog
Important Bugfixes:
- PostTypeContractLevelChecker: Fix unintentional reversal of
linearizedBaseContractsannotation when emitting the warning about the base slot of storage layout being too close to the end of storage. The reversal would affect analysis and code generation dependent on the inheritance order. - Yul Optimizer: Fix call graph cycle detection failing to classify some mutually recursive functions as recursive.
Compiler Features:
- Commandline Interface:
--optimize-runsnow also accepts values from the interval [INT64_MAX, UINT64_MAX]. - EVM: Support for the EVM version "Amsterdam".
- General: Remove support for the experimental EOF (EVM Object Format) backend.
- General: Speed up SHA-256 hashing (
picosha2). - General: The experimental SSA CFG codegen can now spill stack values to memory to avoid stack-too-deep errors.
Bugfixes:
- Constant Evaluator: Fix ICE when evaluating
erc7201builtin with wrong number of arguments. - Custom Storage Layout: Fix segfault when emitting the "too close to end of storage" warning for contracts with no storage variables.
- NatSpec: Disallow
@returntag in event documentation. - SMTChecker: Fix incorrect handling of constant operands of unary operations.
- Standard JSON Interface: Fix incorrect serialization of
optimizer.runssetting for values in the interval [INT64_MAX, UINT64_MAX].
We would especially like to thank all the contributors that made this release possible:
0xjc65eth, Daniel Von Fange, Kamil Śliwak, Mate Soos, Matheus Aguiar, Nikola Matić, Tavian Dev, Thijmen Maus, Weixie Cui, blishko, clonker, cui, djole, matheusaaguiar, metsw24-max, r0qs, rodiazet
Version 0.8.35
We are excited to announce the release of the Solidity Compiler v0.8.35!
Changelog
Language Features:
- General: Add a builtin that computes the base slot of a storage namespace using the
erc7201formula from ERC-7201. - Name Resolver: Warn about identifiers selected for future promotion to Solidity or Yul keywords (
at,error,layout,leave,super,transient,this). - Yul Analyzer: Warn about identifiers selected for future promotion to Yul keywords and reserved identifiers (
basefee,blobbasefee,blobhash,clz,leave,memoryguard,mcopy,prevrandao,tload,tstore).
Compiler Features:
- Commandline Interface: Disallow selecting the deprecated assembly input mode that was only accessible via
--assembleinstead of treating it as equivalent to--strict-assembly. - Commandline Interface: Introduce
--experimentalflag required for enabling the experimental mode. - Commandline Interface: Replace the experimental
--ethdebugand--ethdebug-runtimeoutputs with the more granular--ethdebug-resources,--ethdebug-compilation,--ethdebug-programand--ethdebug-program-runtime. Producingethdebug/format/info/resourcesno longer forces full binary compilation. - EVM: Introduce experimental EVM version
@future. - General: Improve performance of sanity checks throughout the compiler implementation.
- General: Introduce the SSA CFG codegen (experimental).
- General: Restrict the existing experimental features (
generic-solidity,lsp,ethdebug,eof,evm,ast-import,evmasm-import,ir-ast,ssa-cfg) to experimental mode. - Metadata: Store the state of the experimental mode in JSON and CBOR metadata. In CBOR this broadens the meaning of the existing
experimentalfield, which used to indicate only the presence of certain experimental pragmas in the source. - Standard JSON Interface: Introduce
settings.experimentalsetting required for enabling the experimental mode. - Standard JSON Interface: Replace the experimental top-level
ethdebugoutput withethdebug.resourcesandethdebug.compilation. Decouple ethdebug outputs from binary compilation so that requesting theethdebug/format/info/resourcesschema artifacts does not trigger bytecode generation. - Yul Optimizer: Improve performance of control flow side effects collector and function references resolver.
Bugfixes:
- Yul: Fix incorrect serialization of Yul object names containing double quotes and escape sequences, producing output that could not be parsed as valid Yul.
- Yul EVM Code Transform: Improve stack shuffler performance by fixing a BFS deduplication issue.
- Yul IR Code Generation: Preserve custom error argument of
requirewhen stripping of revert strings is selected via--revert-strings strip.
We would especially like to thank all the contributors that made this release possible:
Francisco Giordano, Haowei Hsu, Kamil Śliwak, Masashi Takahashi, Mate Soos, Nikola Matić, Olexandr88, Weixie Cui, blishko, clonker, dxo, jstcz, matheusaaguiar, r0qs, rodiazet
Version 0.8.35-pre.1
Changelog
Language Features:
- General: Add a builtin that computes the base slot of a storage namespace using the
erc7201formula from ERC-7201.
Compiler Features:
- Commandline Interface: Introduce
--experimentalflag required for enabling the experimental mode. - General: Introduce the SSA CFG codegen (experimental).
- General: Restrict the existing experimental features (
generic-solidity,lsp,ethdebug,eof,evm,ast-import,evmasm-import,ir-ast,ssa-cfg) to experimental mode. - Metadata: Store the state of the experimental mode in JSON and CBOR metadata. In CBOR this broadens the meaning of the existing
experimentalfield, which used to indicate only the presence of certain experimental pragmas in the source. - Standard JSON Interface: Introduce
settings.experimentalsetting required for enabling the experimental mode. - Yul EVM Code Transform: Improve stack shuffler performance by fixing a BFS deduplication issue.
Version 0.8.34
We are excited to announce the release of the Solidity Compiler v0.8.34!
Changelog
Important Bugfixes:
- Yul IR Code Generation: Fix a bug that could result in clearing a storage variable instead of a transient storage variable at the same position in the layout (and vice-versa).
Compiler Features:
- Yul Optimizer: Remove redundant prerequisite steps from the default optimizer sequence.
We would especially like to thank all the contributors that made this release possible:
0xcharry, clonker, cui, davidekete, Franco Victorio, Jacopo Pierantozzi, Kamil Śliwak, Manuel Wedler, Marco Castignoli, Matheus Aguiar, Nikola Matic, r0qs, rodiazet, Tilak Madichetti
Version 0.8.33
We are excited to announce the release of the Solidity Compiler v0.8.33!
Changelog
Bugfixes:
- TypeChecker: Fix internal error when accessing getters of constant variables.
We would especially like to thank all the contributors that made this release possible:
Kamil Śliwak, Matheus Aguiar, Nikola Matić, rodiazet
Version 0.8.32
We are excited to announce the release of the Solidity Compiler v0.8.32!
Changelog
Important Bugfixes:
- Code Generator: Fix a bug in clearing/copying of arrays that straddle the end of storage, potentially resulting in assignment/initialization/
delete/push()/pop()skipping some or all of the intended storage writes.
Bugfixes:
- Codegen: Fix internal compiler error when emitting events via module member access.
- TypeChecker: Fix error and event selectors not being considered compile-time constant.
- TypeChecker: Fix
string.concatandbytes.concatwith constant arguments not being considered compile-time constant.
We would especially like to thank all the contributors that made this release possible:
Kamil Śliwak, Marco Castignoli, Matheus Aguiar, Nikola Matić, blishko, r0qs, rodiazet
Version 0.8.31
We are excited to announce the release of the Solidity Compiler v0.8.31!
This version of the compiler brings support for the new EVM features introduced by the Fusaka network upgrade, extends the functionality of storage layout specifiers and deprecates the first batch of features scheduled for removal in the 0.9.0 breaking release. We are also adding official ARM Linux builds.
Changelog
Language Features:
- Custom Storage Layout: Allow using
constantstate variables in the base slot expression. - DocString Parser: Warn about deprecation of inline assembly special comment
memory-safe-assembly. - Syntax Checker: Warn about deprecation of ABI coder v1.
- Syntax Checker: Warn about deprecation of virtual modifiers.
- Type Checker: Warn about deprecation of
sendandtransferfunctions on instances ofaddress. - Type Checker: Warn about deprecation of comparisons between variables of contract types.
- Yul: Introduce builtin
clz(x)for counting the number of leading zero bits in a 256-bit word.
Compiler Features:
- ethdebug: Experimental support for instructions and source locations under EOF.
- EVM: Set default EVM Version to
osaka.
Bugfixes:
- Assembler: Fix not using a fixed-width type for IDs being assigned to subassemblies nested more than one level away, resulting in inconsistent
--asm-jsonoutput between target architectures. - Yul Optimizer: Fix edge case in which invalid Yul code is produced by ExpressionSimplifier due to expressions being substituted that contain out-of-scope variables.
Build System:
- Enable Linux arm64 binaries for testing and releases.
- Ubuntu PPA Packages: Discontinue the PPA as a binary distribution channel.
- Update minimum version requirements of Boost to 1.83.0 for non-windows builds and of GCC and Clang to 13.3 and 18.1.3, respectively. Fixes infinite recursion on
boost::rationalcomparison affecting compiler binaries built with GCC<14.0 and Boost<1.75.
We would especially like to thank all the contributors that made this release possible:
Afounso Souza, Coder, David Klank, Doryu, Emmanuel Ferdman, FT, Fibonacci747, GarmashAlex, Henry Chu, James Niken, Kamil Śliwak, Kendra Karol Sevilla, Martin Blicha, Matheus Aguiar, Michael Cho, MozirDmitriy, Nikola Matić, ParKing666, Patrick Collins, Saw-mon & Natalie, Shane, Tomass, Tronica, clonker, emmmm, fhf, fuder.eth, kilavvy, otc group, phrwlk, r0qs, radik878
Version 0.8.31-pre.1
Changelog
Language Features:
- Yul: Introduce builtin
clz(x)for counting the number of leading zero bits in a 256-bit word.
Compiler Features:
- ethdebug: Experimental support for instructions and source locations under EOF.
Bugfixes:
- Assembler: Fix not using a fixed-width type for IDs being assigned to subassemblies nested more than one level away, resulting in inconsistent
--asm-jsonoutput between target architectures. - Yul Optimizer: Fix edge case in which invalid Yul code is produced by ExpressionSimplifier due to expressions being substituted that contain out-of-scope variables.
Build System:
- Update minimum version requirements of Boost to 1.83.0 for non-windows builds and of GCC and Clang to 13.3 and 18.1.3, respectively. Fixes infinite recursion on
boost::rationalcomparison affecting compiler binaries built with GCC<14.0 and Boost<1.75.
Version 0.8.30
Introducing the newest version of the Solidity Compiler!
We are excited to announce the release of the Solidity Compiler v0.8.30.
This latest version of the compiler introduces prague as the new default EVM version, in addition to a couple of other small additions and fixes.
Changelog
Compiler Features:
- EVM: Set default EVM Version to prague.
- NatSpec: Capture Natspec documentation of enum values in the AST.
Bugfixes:
- SMTChecker: Do not consider loop conditions as constant-condition verification target as this could cause incorrect reports and internal compiler errors.
- SMTChecker: Fix incorrect analysis when only a subset of contracts is selected with --model-checker-contracts.
- SMTChecker: Fix internal compiler error when string literal is used to initialize user-defined type based on fixed bytes.
We would especially like to thank all the contributors that made this release possible:
argentpapa, Bilog WEB3, clonker, closeobserve, Daniel Kirchner, emmmm, ferranmesas@gmx.es, futreall, Henry Chu, Kaan Uzdoğan, Kamil Śliwak, Martin Blicha, Matheus Aguiar, matta, Maximilian Hubert, Maxim Ryabykh, Michael Cho, NeoByteX, Nikola Matić, Ocenka, PixelPilot, rodiazet, Skylar Ray, VolodymyrBg, Voronor