HHVM 4.92 is released! This release marks the end of support for 4.83; HHVM 4.84–4.91 remain supported, as do the 4.56 and 4.80 LTS releases.

(Note: HHVM 4.85, 4.89 and 4.90 were skipped.)


  • If a class A is a supertype of class/interface B via require extends, it is now able to call its’ own private methods on instances of B.
  • Replaced sometimes-confusing “expected dynamic, got nonnull” with clearer “expected dynamic, got mixed”. While nonnull was technically accurate (as mixed is ?nonnull), some users misinterpreted the error as meaning that null was expected, or still consider mixed values to be mixed after a null check.

Breaking Changes

  • Corrected error line number for reified generic errors; FIXME comments may need to be moved.
  • The APCIterator class has been removed from the runtime, as it has generally not been kept up to date or correct, and was not exposed to the typechecker.
  • apc_cache_info() now correctly returns an uncounted_entries key instead of uncounted_entires.
  • Calling methods on dynamic values requires that all values are coercible to dynamic, and the return type will be dynamic.
  • it is now a syntax error to declare a function as async without an Awaitable return type; previously this was separately checked by the type checker and the bytecode emitter, and the typechecker did not detect invalid async lambdas.