HHVM 4.110 is released! This release marks the end of support for 4.104; HHVM 4.105–4.109 remain supported, as do the 4.80 and 4.102 LTS releases.


  • Fixed behavior of setlocale() when called with the special values "" or "0" (#8834).
  • IDE integration will now autocomplete shape field names when calling a function with a shape-typed argument.
  • The runtime no longer raises an error when JSON-serializing a method reference.
  • Improved typechecker error message for a non-abstract method missing a body.

Breaking Changes

  • The built-in functions preg_last_error(), json_last_error(), and json_last_error_msg() have been deleted. They have been deprecated since HHVM 4.106. Instead, use these alternatives:
  • The typechecker now raises an error if an <<__EntryPoint>> function has any generic type parameters.
  • If a keyset, dict, Set, or Map initializer has generic type parameter(s), the typechecker now raises an error if the key type is not arraykey or its subtype (int or string). For example, $foo = keyset<bool>[]; is an error.
  • When appending to a keyset ($keyset[] = 'foo';), the typechecker now correctly enforces that the appended value is an int or string.
  • The typechecker now raises an error when indexing into a Map using an index that is not an int or string. This had already been an error for other collection types.