Releases: ethereum/solidity
Version 0.8.25
Introducing the newest version of the Solidity Compiler!
We are excited to announce the release of the Solidity Compiler Solidity v0.8.25. This release is a small one, and is mainly centered around the Dencun hard-fork that occurred yesterday. On that note, the default EVM version in the compiler is now cancun
, and we've also introduced some gas savings via better exploitation of the MCOPY
opcode, as well fixing an issue that could result in larger than necessary bytecode.
Changelog
Compiler Features:
- Code Generator: Use
MCOPY
instead ofMLOAD
/MSTORE
loop when copying byte arrays. - EVM: Set default EVM version to
cancun
. - Yul Analyzer: Emit transient storage warning only for the first occurrence of
tstore
.
Bugfixes:
- Assembler: Prevent incorrect calculation of tag sizes.
- Commandline Interface: Do not run IR pipeline when
--via-ir
is used but no output that depends on the IR is requested. - EVM Assembly Import: Fix handling of missing source locations during import.
- SMTChecker: Ensure query is properly flushed to a file before calling solver when using SMT-LIB interface.
- SMTChecker: Fix internal error caused by not respecting the sign of an integer type when constructing zero-value SMT expressions.
- SMTChecker: Run Eldarica only when explicitly requested with
--model-checker-solvers eld
, even when it is present on the system.
We especially thank all the contributors that made this release possible:
Aditya Kode, Alexander Arlt, Bhargava Shastry, ByeongSu Go, Chomtana, Cyrus, Daniel Kirchner, Dimitris Apostolou, Jeason, Kamil Śliwak, Martin Blicha, Matheus Aguiar, Nikola Matić, Saw-mon & Natalie, Simon Perriard, Twice, Vishwa Mehta, Vojtch, minaminao, omahs, pgebal, r0qs, racerol
UPDATE 2024-03-14: The MacOS universal binary originally included here has been rebuilt and replaced due to a missing signature which made it unusable.
The SHA-256 hash of the old binary was ce09577e654628c2b4d00e66bcab7c8a4dc18c1d9812dcbab7bd8572a6d4d27e
. The new one is cc3f94a70ac681b0304084acc1980aabe2a1bb3240d44ce76a8df0e1e77a2110
.
Version 0.8.24
Introducing the newest version of the Solidity Compiler!
We are excited to announce the release of the Solidity Compiler Solidity v0.8.24. This newest version of the compiler brings readiness for the "Cancun" network upgrade, including support for transient storage (EIP-1153), shard blob transactions (EIP-4844), & more. The release binaries for macOS are now also compatible with Apple Silicon chips.
Notable Features
- Support for transient storage for inline assembly (EIP-1153)
- Support for BLOBBASEFEE (EIP-7516)
- Support for MCOPY (EIP-5656)
- Changes in SELFDESTRUCT Behavior (EIP-6780)
- Support for Apple Silicon
Changelog
Language Features
- Introduce global
block.blobbasefee
for retrieving the blob base fee of the current block. - Introduce global function
blobhash(uint)
for retrieving versioned hashes of blobs, akin to the homonymous Yul builtin. - Yul: Introduce builtin
blobbasefee()
for retrieving the blob base fee of the current block. - Yul: Introduce builtin
blobhash()
for retrieving versioned hashes of blobs associated with the transaction. - Yul: Introduce builtin
mcopy()
for cheaply copying data between memory areas. - Yul: Introduce builtins
tload()
andtstore()
for transient storage access.
Compiler Features
- EVM: Support for the EVM Version "Cancun".
- SMTChecker: Support
bytes.concat
except when string literals are passed as arguments. - Standard JSON Interface: Add experimental support to import EVM assembly in the format used by
--asm-json
. - TypeChecker: Comparison of internal function pointers now yields a warning, as it can produce unexpected results with the legacy pipeline enabled.
Bugfixes:
- AST import: Fix bug when importing inline assembly with empty
let
variable declaration.
We especially thank all the contributors that made this release possible:
Alexander Arlt, Bhargava Shastry, Daniel Kirchner, GoodDaisy, Jitendra Kumar, Kamil Śliwak, Matheus Aguiar, Nikola Matić, Qi He, Sukey, Vishwa Mehta, pgebal, r0qs, xiaolou86.
Version 0.8.23
Introducing the newest version of the Solidity Compiler!
We are excited to announce the latest release of the Solidity Compiler, Solidity v0.8.23.
Changelog
Important Bugfixes:
- Optimizer: Fix block deduplicator bug which led to blocks which are identical apart from the contents of
verbatim
instructions to be treated as equivalent and thus collapsed into a single one.
Compiler Features:
- Commandline Interface: An empty
--yul-optimizations
sequence can now be always provided. - Standard JSON Interface: An empty
optimizerSteps
sequence can now always be provided.
We especially thank all the contributors that made this release possible:
Daniel Kirchner, Kamil Śliwak, Markus Osterlund / robriks, Matheus Aguiar, Nikola Matić, Nuzair
Version 0.8.22
Introducing the newest version of the Solidity Compiler!
We are excited to announce the latest release of the Solidity Compiler, Solidity v0.8.22.
IMPORTANT NOTE:
This release deprecates support for EVM versions older than Constantinople for the reason of ruling out the need to maintain multiple complex code paths or workarounds for ancient EVM versions. In case you rely on the support for such EVM versions, please reach out to us.
Notable Features:
- Unchecked loop increments
- Adding support for importing EVM Assembly JSON (experimental)
- Adjusting Yul optimizer to rematerialize zero literals
Changelog
Language Features:
- Allow defining events at file level.
Compiler Features:
- Code Generator: Remove redundant overflow checks of certain
for
loops when the counter variable cannot overflow. - Commandline Interface: Add
--no-import-callback
option that prevents the compiler from loading source files not given explicitly on the CLI or in Standard JSON input. - Commandline Interface: Add an experimental
--import-asm-json
option that can import EVM assembly in the format used by--asm-json
. - Commandline Interface: Use proper severity and coloring also for error messages produced outside of the compilation pipeline.
- EVM: Deprecate support for "homestead", "tangerineWhistle", "spuriousDragon" and "byzantium" EVM versions.
- Parser: Remove the experimental error recovery mode (
--error-recovery
/settings.parserErrorRecovery
). - SMTChecker: Support user-defined operators.
- Yul Optimizer: If
PUSH0
is supported, favor zero literals over storing zero values in variables. - Yul Optimizer: Run the
Rematerializer
andUnusedPruner
steps at the end of the default clean-up sequence.
Bugfixes:
- Code Generator: Fix output from via-IR code generator being dependent on which files were discovered by import callback. In some cases, a different AST ID assignment would alter the order of functions in internal dispatch, resulting in superficially different but semantically equivalent bytecode.
- NatSpec: Fix internal error when requesting
userdoc
ordevdoc
for a contract that emits an event defined in a foreign contract or interface. - SMTChecker: Fix encoding error that causes loops to unroll after completion.
- SMTChecker: Fix inconsistency on constant condition checks when
while
orfor
loops are unrolled before the condition check. - Yul Optimizer: Fix replacement decisions during CSE being affected by Yul variable names generated by the compiler, resulting in different (but equivalent) bytecode in some situations.
AST Changes:
- AST: Fix wrong initial ID for Yul nodes in the AST.
We especially thank all the contributors that made this release possible:
Alejandro Criado-Pérez, Alexander Arlt, Bhargava Shastry, Daniel, Jun Zhang, Kamil Śliwak, Leo, Martin Blicha, Matheus Aguiar, Nikola Matić, Paul Wackerow, Pawel Gebal, Saw-mon & Natalie, Zach Obront, franzihei, omahs, pgebal, r0qs, shalaamum
Version 0.8.21
Introducing the newest version of the Solidity Compiler!
We are excited to announce the latest release of the Solidity Compiler, Solidity v0.8.21.
Changelog
Important Bugfixes:
- Code Generator: Always generate code for the expression in
<expression>.selector
in the legacy code generation pipeline. - Yul Optimizer: Fix
FullInliner
step (i
) not preserving the evaluation order of arguments passed into inlined functions in code that is not in expression-split form (i.e. when using a custom optimizer sequence in which the step not preceded byExpressionSplitter
(x
)).
Language Features:
- Allow qualified access to events from other contracts.
- Relax restrictions on initialization of immutable variables. Reads and writes may now happen at any point at construction time outside of functions and modifiers. Explicit initialization is no longer mandatory.
Compiler Features:
- Commandline Interface: Add
--ast-compact-json
output in assembler mode. - Commandline Interface: Add
--ir-ast-json
and--ir-optimized-ast-json
outputs for Solidity input, providing AST in compact JSON format for IR and optimized IR. - Commandline Interface: Respect
--optimize-yul
and--no-optimize-yul
in compiler mode and accept them in assembler mode as well.--optimize --no-optimize-yul
combination now allows enabling EVM assembly optimizer without enabling Yul optimizer. - EWasm: Remove EWasm backend.
- Parser: Introduce
pragma experimental solidity
, which will enable an experimental language mode that, in particular, has no stability guarantees between non-breaking releases and is not suited for production use. - SMTChecker: Add
--model-checker-print-query
CLI option andsettings.modelChecker.printQuery
JSON option to output the SMTChecker queries in the SMTLIB2 format. This requires usingsmtlib2
solver only. - Standard JSON Interface: Add
ast
file-level output for Yul input. - Standard JSON Interface: Add
irAst
andirOptimizedAst
contract-level outputs for Solidity input, providing AST in compact JSON format for IR and optimized IR. - Yul Optimizer: Remove experimental
ReasoningBasedSimplifier
optimization step. - Yul Optimizer: Stack-to-memory mover is now enabled by default whenever possible for via IR code generation and pure Yul compilation.
Bugfixes:
- Code Generator: Disallow complex expressions whose results are types, built-ins, modules or some unassignable functions. The legacy code generation pipeline would not actually evaluate them, discarding any side effects they might have.
- Code Generator: Fix not entirely deterministic order of functions in unoptimized Yul output. The choice of C++ compiler in some cases would result in different (but equivalent) bytecode (especially from native binaries vs emscripten binaries).
- Commandline Interface: Fix internal error when using
--stop-after parsing
and requesting some of the outputs that require full analysis or compilation. - Commandline Interface: It is no longer possible to specify both
--optimize-yul
and--no-optimize-yul
at the same time. - SMTChecker: Fix encoding of side-effects inside
if
andternary conditional
statements in the BMC engine. - SMTChecker: Fix false negative when a verification target can be violated only by a trusted external call from another public function.
- SMTChecker: Fix generation of invalid SMT-LIB2 scripts in BMC engine with trusted mode for external calls when CHC engine times out.
- SMTChecker: Fix internal error caused by incorrectly classifying external function call using function pointer as a public getter.
- SMTChecker: Fix internal error caused by using external identifier to encode member access to functions that take an internal function as a parameter.
- Standard JSON Interface: Fix an incomplete AST being returned when analysis is interrupted by certain kinds of fatal errors.
- Type Checker: Disallow using certain unassignable function types in complex expressions.
- Type Checker: Function declaration types referring to different declarations are no longer convertible to each other.
- Yul Optimizer: Ensure that the assignment of memory slots for variables moved to memory does not depend on AST IDs that may depend on whether additional files are included during compilation.
- Yul Optimizer: Fix
FullInliner
step not ignoring code that is not in expression-split form. - Yul Optimizer: Fix optimized IR being unnecessarily passed through the Yul optimizer again before bytecode generation.
AST Changes:
- AST: Add the
experimentalSolidity
field to theSourceUnit
nodes, which indicates whether the experimental parsing mode has been enabled viapragma experimental solidity
.
We especially thank all the contributors that made this release possible:
Alejandro Criado-Pérez, Alexander Arlt, Alexandre Ferreira, Bhargava Shastry, Cliff Syner, Daniel Kirchner, David Bar-On, GiokaMarkella, Jun Zhang, Kaan Uzdoğan, Kamil Śliwak, Leo Alt, Martin Blicha, Matheus Aguiar, Nikola Matić, Nuno Santos, Paul Wackerow, Pawel Gebal, johnnygee19, minaminao, r0qs
Version 0.8.20
Introducing the newest version of the Solidity Compiler!
We are excited to announce the latest release of the Solidity Compiler, Solidity v0.8.20.
This latest version includes a range of improvements and, most importantly, support for Shanghai!
It also contains performance improvements in the via-IR pipeline and improves the list of events exposed in the contract ABI.
IMPORTANT NOTE: This compiler switches the default target EVM version to Shanghai, which means that the generated bytecode will include PUSH0
opcodes. Be sure to select the appropriate EVM version in case you intend to deploy on a chain other than mainnet like L2 chains that may not yet support PUSH0
, otherwise deployment of your contracts will fail.
Changelog
Compiler Features:
- Assembler: Use
push0
for placing0
on the stack for EVM versions starting from "Shanghai". This decreases the deployment and runtime costs. - EVM: Set default EVM version to "Shanghai".
- EVM: Support for the EVM Version "Shanghai".
- NatSpec: Add support for NatSpec documentation in
enum
definitions. - NatSpec: Add support for NatSpec documentation in
struct
definitions. - NatSpec: Include NatSpec from events that are emitted by a contract but defined outside of it in userdoc and devdoc output.
- Optimizer: Re-implement simplified version of
UnusedAssignEliminator
andUnusedStoreEliminator
. It can correctly remove some unused assignments in deeply nested loops that were ignored by the old version. - Parser: Unary plus is no longer recognized as a unary operator in the AST and triggers an error at the parsing stage (rather than later during the analysis).
- SMTChecker: Group all messages about unsupported language features in a single warning. The CLI option
--model-checker-show-unsupported
and the JSON optionsettings.modelChecker.showUnsupported
can be enabled to show the full list. - SMTChecker: Properties that are proved safe are now reported explicitly at the end of analysis. By default, only the number of safe properties is shown. The CLI option
--model-checker-show-proved-safe
and the JSON optionsettings.modelChecker.showProvedSafe
can be enabled to show the full list of safe properties. - Standard JSON Interface: Add experimental support for importing ASTs via Standard JSON.
- Yul EVM Code Transform: If available, use
push0
instead ofcodesize
to produce an arbitrary value on stack in order to create equal stack heights between branches.
Bugfixes:
- ABI: Include events in the ABI that are emitted by a contract but defined outside of it.
- Immutables: Disallow initialization of immutables in try/catch statements.
- SMTChecker: Fix false positives in ternary operators that contain verification targets in its branches, directly or indirectly.
AST Changes:
- AST: Add the
internalFunctionIDs
field to the AST nodes of contracts containing IDs of functions that may be called via the internal dispatch. The field is a map from function AST IDs to internal dispatch function IDs. These IDs are always generated, but they are only used in via-IR code generation. - AST: Add the
usedEvents
field toContractDefinition
which contains the AST IDs of all events emitted by the contract as well as all events defined and inherited by the contract.
We especially thank all the contributors that made this release possible:
Alexander Arlt, Alex Beregszaszi, Bhargava Shastry, chriseth, Christian Parpart, Daniel Kirchner, Francois-Rene Rideau, hrkrshnn, Kaan Uzdoğan, Kamil Śliwak, Leo Alt, Matheus Aguiar, Michael de Hoog, minaminao, mmqxyz, Nikola Matic, Nuno Santos, Ojas Aklecha, Peter Lemenkov, Rodrigo Q. Saramago, uji, Vaibhaw
If you want to perform a source build, please only use solidity_0.8.20.tar.gz
and not the source archives generated automatically by GitHub.
Version 0.8.19
Introducing the newest version of the Solidity Compiler!
We are excited to announce the latest release of the Solidity Compiler, Solidity v0.8.19.
This latest version includes a range of improvements and, most importantly, custom operators for user-defined value types language feature!
It also contains a fix for a long-standing bug that can result in code that is only used in creation code to also be included in runtime bytecode.
Changelog
Language Features:
- Allow defining custom operators for user-defined value types via
using {f as +} for T global
syntax.
Compiler Features:
- SMTChecker: New trusted mode that assumes that any compile-time available code is the actual used code, even in external calls. This can be used via the CLI option
--model-checker-ext-calls trusted
or the JSON fieldsettings.modelChecker.extCalls: "trusted"
.
Bugfixes:
- Assembler: Avoid duplicating subassembly bytecode where possible.
- Code Generator: Avoid including references to the deployed label of referenced functions if they are called right away.
- ContractLevelChecker: Properly distinguish the case of missing base constructor arguments from having an unimplemented base function.
- SMTChecker: Fix internal error caused by unhandled
z3
expressions that come from the solver when bitwise operators are used. - SMTChecker: Fix internal error when using the custom NatSpec annotation to abstract free functions.
- TypeChecker: Also allow external library functions in
using for
.
AST Changes:
- AST: Add
function
field toUnaryOperation
andBinaryOperation
AST nodes.functionList
inUsingForDirective
AST nodes will now containoperator
anddefinition
members instead offunction
when the list entry defines an operator.
We especially thank all the contributors that made this release possible:
Bhargava Shastry, Daniel Kirchner, Evan Saulpaugh, Jacob Heider, Kamil Śliwak, Leo Alt, Matheus Aguiar, Michał Janiszewski, Nicolás Acosta, Nikola Matić, Nuno Santos, Pawel Gebal, Peter Lemenkov, Rodrigo Q. Saramago, William Entriken, Zachinquarantine, chriseth, drblessing, minaminao, wechman
If you want to perform a source build, please only use solidity_0.8.19.tar.gz
and not the source archives generated automatically by GitHub.
Version 0.8.18
Introducing the newest version of the Solidity Compiler!
We are excited to announce the latest release of the Solidity Compiler, Solidity v0.8.18.
This latest version includes a range of improvements and it also introduces support for the Paris upgrade!
Changelog
Language Features:
- Allow named parameters in mapping types.
Compiler Features:
- Commandline Interface: Add
--no-cbor-metadata
that skips CBOR metadata from getting appended at the end of the bytecode. - Commandline Interface: Return exit code
2
on uncaught exceptions. - EVM: Deprecate
block.difficulty
and disallowdifficulty()
in inline assembly for EVM versions >= paris. The change is due to the renaming introduced by EIP-4399. - EVM: Introduce
block.prevrandao
in Solidity andprevrandao()
in inline assembly for EVM versions >= paris. - EVM: Set the default EVM version to "Paris".
- EVM: Support for the EVM version "Paris".
- Language Server: Add basic document hover support.
- Natspec: Add event Natspec inheritance for devdoc.
- Optimizer: Added optimization rule
and(shl(X, Y), shl(X, Z)) => shl(X, and(Y, Z))
. - Parser: More detailed error messages about invalid version pragmas.
- SMTChecker: Make
z3
the default solver for the BMC and CHC engines instead of all solvers. - SMTChecker: Support Eldarica as a Horn solver for the CHC engine when using the CLI option
--model-checker-solvers eld
. The binaryeld
must be available in the system. - Solidity Upgrade Tool: Remove
solidity-upgrade
tool. - Standard JSON: Add a boolean field
settings.metadata.appendCBOR
that skips CBOR metadata from getting appended at the end of the bytecode. - TypeChecker: Warn when using deprecated builtin
selfdestruct
. - Yul EVM Code Transform: Generate more optimal code for user-defined functions that always terminate a transaction. No return labels will be pushed for calls to functions that always terminate.
- Yul Optimizer: Allow replacing the previously hard-coded cleanup sequence by specifying custom steps after a colon delimiter (
:
) in the sequence string. - Yul Optimizer: Eliminate
keccak256
calls if the value was already calculated by a previous call and can be reused.
Bugfixes:
- Parser: Disallow several
indexed
attributes for the same event parameter. - Parser: Disallow usage of the
indexed
attribute for modifier parameters. - SMTChecker: Fix display error for negative integers that are one more than powers of two.
- SMTChecker: Fix internal error on chain assignments using static fully specified state variables.
- SMTChecker: Fix internal error on multiple wrong SMTChecker natspec entries.
- SMTChecker: Fix internal error when a public library function is called internally.
- SMTChecker: Fix internal error when deleting struct member of function type.
- SMTChecker: Fix internal error when using user-defined types as mapping indices or struct members.
- SMTChecker: Improved readability for large integers that are powers of two or almost powers of two in error messages.
- TypeChecker: Fix bug where private library functions could be attached with
using for
outside of their declaration scope. - Yul Optimizer: Hash hex and decimal literals according to their value instead of their representation, improving the detection of equivalent functions.
We especially thank all the contributors that made this release possible:
Alexander Arlt, Alex Beregszaszi, andy53, Anton Paymyshev, Bhargava Shastry, Big-Aaron, Bojidar00, Bulgantamir Gankhuyag, chriseth, Christian Parpart, ChrisXXXXXXX, Damian Wechman, Daniel Kirchner, Doggo, Duc Thanh Nguyen, Franco Victorio, Franziska Heintel, George Plotnikov, hrkrshnn, Ikko Ashimine, Ishtiaque Zahid, John Kane, Kaan Uzdoğan, Kamil Śliwak, Leo Alt, ligi, Lokesh Kumar, Matheus Aguiar, Mathias L. Baumann, Mike Leach, Miles Liu, Minebuu, Mio, Nathaniel Jensen, Nikola Matić, Nishant Sachdeva, Nuno Santos, omahs, Paweł Bylica, Phill, Pierre Grimaud, Prusakova Katya, Rafal Stozek, Rajkumar gaur, Rhythm Bansal, Riley, Rodrigo Q. Saramago, Sabnock, Saw-mon-and-Natalie, Sebastian Supreme, Soham Zemse, Vinay, vlad, William Entriken, Yusuf Benli
If you want to perform a source build, please only use solidity_0.8.18.tar.gz
and not the source archives generated automatically by GitHub.
UPDATE 2023-02-02: The Linux binary originally included here has been rebuilt and replaced due to incompatibility with older Ubuntu releases (Bionic, Focal and earlier). We have recently migrated our CI builds to Ubuntu 22.04, which includes a backwards-incompatible glibc version. Since the Linux binary is not completely static (it dynamically loads Z3 and consequently glibc), it would not run with older glibc when built against newer one. You can find more details in the release blog post and issue #13921.
To be clear: both binaries will produce identical outputs under all circumstances, including the commit hash in the metadata. Only the hash of the compiler binary itself will change due to the replacement, but the new binary will always produce byte-identical output.
The SHA-256 hash of the old binary was a1c0f33eb4482c26f56719ecf62b0ee05d7d7a4f8264ffbddf9ebcd9095c32bd
. The new one is
95e6ed4949a63ad89afb443ecba1fb8302dd2860ee5e9baace3e674a0f48aa77
.
Version 0.8.17
This release primarily fixes an important bug, but also involves some improvements in code generation, optimizer and in the language server.
For details, please see the release announcement.
Important Bugfixes:
- Yul Optimizer: Prevent the incorrect removal of storage writes before calls to Yul functions that conditionally terminate the external EVM call.
Compiler Features:
- Code Generator: More efficient overflow checks for multiplication.
- Language Server: Analyze all files in a project by default (can be customized by setting
'file-load-strategy'
to'directly-opened-and-on-import'
in LSP settings object). - Yul Optimizer: Simplify the starting offset of zero-length operations to zero.
Bugfixes:
- Type Checker: Fix internal compiler error on tuple assignments with invalid left-hand side.
- Yul IR Code Generation: Fix internal compiler error when accessing the
.slot
member of a mapping through a storage reference in inline assembly.
Build System:
- Allow disabling pedantic warnings and do not treat warnings as errors during compiler build when
-DPEDANTIC=OFF
flag is passed to CMake. - Update emscripten to version 3.1.19.
We especially thank all the contributors that made this release possible:
Alexander Arlt, Bhargava Shastry, Christian Parpart, Damian Wechman, Daniel Kirchner, Duc Thanh Nguyen, Emmanuel Oaikhenan, Francisco Giordano, Kamil Śliwak, krakxn, Leonardo Alt, Leonid Pospelov, Luke Hutchison, Luoh Ren-Shan, Matheus Aguiar, Mathias L. Baumann, MeetRajput00, Nikola Matić, NoFaceDev, Pranay, Roman Figurin, Taylor Ferran, Thanh Tran, Yuvraj Singh, aathan, emmaodia, khue, kuzdogan, minaminao, Nishant Sachdeva, tcoyvwac, xternet
If you want to perform a source build, please only use solidity_0.8.17.tar.gz
and not the zip provided by github directly.
Version 0.8.16
This release fixes one important bug and contains further minor bug fixes and features.
For details, please see the release announcement.
Important Bugfixes:
- Code Generation: Fix data corruption that affected ABI-encoding of calldata values represented by tuples: structs at any nesting level; argument lists of external functions, events and errors; return value lists of external functions. The 32 leading bytes of the first dynamically-encoded value in the tuple would get zeroed when the last component contained a statically-encoded array.
Compiler Features:
- Code Generator: More efficient code for checked addition and subtraction.
- TypeChecker: Support using library constants in initializers of other constants.
- Yul IR Code Generation: Improved copy routines for arrays with packed storage layout.
- Yul Optimizer: Add rule to convert
mod(add(X, Y), A)
intoaddmod(X, Y, A)
, ifA
is a power of two. - Yul Optimizer: Add rule to convert
mod(mul(X, Y), A)
intomulmod(X, Y, A)
, ifA
is a power of two.
Bugfixes:
- Commandline Interface: Disallow the following options outside of the compiler mode:
--via-ir
,--metadata-literal
,--metadata-hash
,--model-checker-show-unproved
,--model-checker-div-mod-no-slacks
,--model-checker-engine
,--model-checker-invariants
,--model-checker-solvers
,--model-checker-timeout
,--model-checker-contracts
,--model-checker-targets
. - Type Checker: Fix compiler crash on tuple assignments involving certain patterns with unary tuples on the left-hand side.
- Type Checker: Fix compiler crash when
abi.encodeCall
received a tuple expression instead of an inline tuple. - Type Checker: Fix null dereference in
abi.encodeCall
type checking of free function.
We especially thank all the contributors that made this release possible:
a3d4, Aiman Baharna, Alex Beregszaszi, Bhargava Shastry, Christian Parpart, Christian Reitwiessner, CJ42, Damian Wechman, Daniel Kirchner, Daniel Lupu, Derek Gottfrid, Duc Thanh Nguyen, Femi Bolaji, Harikrishnan Mulackal, Ishtiaque Zahid, Kamil Śliwak, krakxn, Matheus Aguiar, Mathias L. Baumann, Maximiliano Schultheis, Midhun07, minami, Nikola Matić, Nishant Sachdeva, Quentin Garchery, Richie, Rodrigo Baraglia, Rohit Kumar Suman, Ryan, vdusart, victorknox, William Entriken, ywon0925
If you want to perform a source build, please only use solidity_0.8.16.tar.gz
and not the zip provided by github directly.