{ skip to content }

Solidity 0.8.16 Release Announcement

Posted by Solidity Team on August 8, 2022


Solidity v0.8.16 fixes an important bug.

The bug may result in small parts of dynamic tuple components being inadvertently zeroed during ABI re-encoding when the last component is a statically-sized uint or bytes32 calldata array. See Head Overflow Bug in Calldata Tuple ABI-Reencoding for more information.

Apart from that, there are several minor bug fixes and improvements like more gas-efficient overflow checks for addition and subtraction.

Full Changelog

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) into addmod(X, Y, A), if A is a power of two.
  • Yul Optimizer: Add rule to convert mod(mul(X, Y), A) into mulmod(X, Y, A), if A is a power of two.


  • 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.

A big thank you to all contributors who helped make this release possible!

Download the new version of Solidity here: v0.8.16.

Previous post

Next post

Get involved





Discover more

BlogDocumentationUse casesContributeAboutForum

2024 Solidity Team

Security Policy

Code of Conduct