Skip to content

Releases: argotorg/solidity

Version 0.8.37

Choose a tag to compare

@nikola-matic nikola-matic released this 10 Sep 06:38
f401782

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 delete applied to an element of a bytes array 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 require function.
  • 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.slotnum to access the beacon chain slot number of the current block, available since the Amsterdam EVM version (EIP-7843).
  • Yul: Introduce builtin slotnum() for the SLOTNUM opcode, 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: LoopInvariantCodeMotion can now move expressions depending on function parameters out of loops.
  • Yul Optimizer: UnusedStoreEliminator can 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 unchecked contexts 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-calls in 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 of returndatasize().

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

Choose a tag to compare

@nikola-matic nikola-matic released this 09 Jul 07:40
8a07979

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 linearizedBaseContracts annotation 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-runs now 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 erc7201 builtin 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 @return tag in event documentation.
  • SMTChecker: Fix incorrect handling of constant operands of unary operations.
  • Standard JSON Interface: Fix incorrect serialization of optimizer.runs setting 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

Choose a tag to compare

@nikola-matic nikola-matic released this 29 Apr 07:44
47b9ded

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 erc7201 formula 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 --assemble instead of treating it as equivalent to --strict-assembly.
  • Commandline Interface: Introduce --experimental flag required for enabling the experimental mode.
  • Commandline Interface: Replace the experimental --ethdebug and --ethdebug-runtime outputs with the more granular --ethdebug-resources, --ethdebug-compilation, --ethdebug-program and --ethdebug-program-runtime. Producing ethdebug/format/info/resources no 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 experimental field, which used to indicate only the presence of certain experimental pragmas in the source.
  • Standard JSON Interface: Introduce settings.experimental setting required for enabling the experimental mode.
  • Standard JSON Interface: Replace the experimental top-level ethdebug output with ethdebug.resources and ethdebug.compilation. Decouple ethdebug outputs from binary compilation so that requesting the ethdebug/format/info/resources schema 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 require when 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

Version 0.8.35-pre.1 Pre-release
Pre-release

Choose a tag to compare

@nikola-matic nikola-matic released this 11 Mar 06:25
a99b6d8

Changelog

Language Features:

  • General: Add a builtin that computes the base slot of a storage namespace using the erc7201 formula from ERC-7201.

Compiler Features:

  • Commandline Interface: Introduce --experimental flag 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 experimental field, which used to indicate only the presence of certain experimental pragmas in the source.
  • Standard JSON Interface: Introduce settings.experimental setting required for enabling the experimental mode.
  • Yul EVM Code Transform: Improve stack shuffler performance by fixing a BFS deduplication issue.

Version 0.8.34

Choose a tag to compare

@rodiazet rodiazet released this 18 Feb 10:11
80d5c53

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

Choose a tag to compare

@r0qs r0qs released this 18 Dec 21:13
64118f2

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

Choose a tag to compare

@nikola-matic nikola-matic released this 18 Dec 08:06
ebbd65e

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.concat and bytes.concat with 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

Choose a tag to compare

@nikola-matic nikola-matic released this 03 Dec 09:35
fd3a226

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 constant state 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 send and transfer functions on instances of address.
  • 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-json output 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::rational comparison 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

Version 0.8.31-pre.1 Pre-release
Pre-release

Choose a tag to compare

@nikola-matic nikola-matic released this 16 Oct 12:51
b59566f

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-json output 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::rational comparison affecting compiler binaries built with GCC<14.0 and Boost<1.75.

Version 0.8.30

Choose a tag to compare

@nikola-matic nikola-matic released this 07 May 10:27
73712a0

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