Skip to content

Releases: argotorg/solidity

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

Version 0.8.29

Choose a tag to compare

@nikola-matic nikola-matic released this 12 Mar 07:38
ab55807

Introducing the newest version of the Solidity Compiler!

We are excited to announce the release of the Solidity Compiler v0.8.29.

This latest version of the compiler brings support for EVM Object Format (experimental), Storage Layout Specifiers, and more!

Changelog

Language Features:

  • Allow relocating contract storage to an arbitrary location.

Compiler Features:

  • Error Reporting: Errors reported during code generation now point at the location of the contract when more fine-grained location is not available.
  • ethdebug: Experimental support for instructions and source locations.
  • EVM: Support for the EVM version "Osaka".
  • EVM Assembly Import: Allow enabling opcode-based optimizer.
  • General: The experimental EOF backend implements a subset of EOF sufficient to compile arbitrary high-level Solidity syntax via IR with optimization enabled.
  • SMTChecker: Support block.blobbasefee and blobhash.
  • SMTChecker: The option --model-checker-print-query no longer requires --model-checker-solvers smtlib2.
  • SMTChecker: Z3 is now a runtime dependency, not a build dependency (except for emscripten build).
  • Yul Parser: Make name clash with a builtin a non-fatal error.

Bugfixes:

  • Commandline Interface: Report StackTooDeep errors in compiler mode as proper errors instead of printing diagnostic information meant for internal compiler errors.
  • Error Reporting: Fix error locations not being shown for source files with empty names.
  • General: Fix internal compiler error when requesting IR AST outputs for interfaces and abstract contracts.
  • Metadata: Fix custom cleanup sequence missing from metadata when other optimizer settings have default values.
  • SMTChecker: Fix internal compiler error when analyzing overflowing expressions or bitwise negation of unsigned types involving constants.
  • SMTChecker: Fix reporting on targets that are safe in the context of one contract but unsafe in the context of another contract.
  • SMTChecker: Fix SMT logic error when analyzing cross-contract getter call with BMC.
  • SMTChecker: Fix SMT logic error when contract deployment involves string literal to fixed bytes conversion.
  • SMTChecker: Fix SMT logic error when external call has extra effectless parentheses.
  • SMTChecker: Fix SMT logic error when initializing a fixed-sized-bytes array using string literals.
  • SMTChecker: Fix SMT logic error when translating invariants involving array store and select operations.
  • SMTChecker: Fix wrong encoding of string literals as arguments of ecrecover precompile.
  • Standard JSON Interface: Fix generatedSources and sourceMap being generated internally even when not requested.
  • TypeChecker: Fix spurious compilation errors due to incorrect computation of contract storage size which erroneously included transient storage variables.
  • Yul: Fix internal compiler error when a code generation error should be reported instead.
  • Yul Optimizer: Fix failing debug assertion due to dereferencing of an empty optional value.

Build system:

  • Linux release builds are fully static again and no longer depend on glibc.
  • Switch from C++17 to C++20 as the target standard.

Solc-Js:

  • The wrapper now requires at least nodejs v12.

We would especially like to thank all the contributors that made this release possible:
Alexander Arlt, chloefeal, clonker, comfsrt, Cypher Pepe, Daniel Kirchner, DaniPopes, dxsullivan, ericlehong, Fallengirl, flylai, FT, fuder.eth, Gaetan Lepage, gmh5225, haoyang9804, Hopium, Igor Żuk, imilygathia, irreduciblen, Jeff Wentworth, Kamil Śliwak, kilavvy, leopardracer, Marco, Martin Blicha, Matheus Aguiar, Maxim Evtush, monem, Nikola Matić, Noisy, piguagua, PixelPilot, planetBoy, r0qs, RiceChuan, rodiazet, Rudko Hanna, santamasa, Sebastian Miasojed, Skyge, Skylar Ray, sukey2008, Tran Quang Loc, Ustas, Vishwa Mehta, xiaobei0715, XxAlex74xX