This release adds support for accessing the code of a contract type, which will hopefully make the new CREATE2 opcode easier to use. We also added some static analysis features to the compiler, but most changes were done “under the hood” to pave the way for using the new Yul-based optimizer with ABIEncoderV2.

Language Features:

  • Provide access to creation and runtime code of contracts via type(C).creationCode / type(C).runtimeCode.

Compiler Features:

  • Control Flow Graph: Warn about unreachable code.
  • SMTChecker: Support basic typecasts without truncation.
  • SMTChecker: Support external function calls and erase all knowledge regarding storage variables and references.

Bugfixes:

  • Emscripten: Split simplification rule initialization up further to work around issues with soljson.js in some browsers.
  • Type Checker: Disallow calldata structs until implemented.
  • Type Checker: Return type error if fixed point encoding is attempted instead of throwing UnimplementedFeatureError.
  • Yul: Check that arguments to dataoffset and datasize are literals at parse time and properly take this into account in the optimizer.
  • Yul: Parse number literals for detecting duplicate switch cases.
  • Yul: Require switch cases to have the same type.

Build System:

  • Emscripten: Upgrade to emscripten 1.38.8 on travis and circleci.

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

Download the new version of Solidity here.