HHVM 4.172 is released! 4.169 - 4.171 remain supported, as do the 4.168 and 4.153 LTS releases.


  • Fixed a bug preventing classes using a trait with require class <that class> from being mocked. (commit)
  • Regular expression functions now have a new error type, for when regular expressions jitted by PCRE run out of scratch space: PREG_JIT_STACKLIMIT_ERROR These would previously be reported as generic internal errors, which made debugging tricky. (commit)

Breaking Changes

  • Two compiler options have been renamed - when compiling a repo the compiler will no longer accept --module or --cmodule options as of this release. Please use their new names --dir and --cdir instead (new names added in release 4.169). This change is intended to avoid confusion wht the ‘modules’ experimental feature. (commit)
  • The typechecker now disallows overriding an async method with a non-async one. This was previously allowed as long as the types in the signature were compatible, but this made it easy to accidentally write subtle bugs by leaving off the async keyword on the overriding method. (commit)
  • When using the ‘modules’ experimental feature, note that the default value of the Eval.EnforceModules runtime option is changing from 1 (warn) to 2 (throw exceptions). (commit)
  • When using the like_type_hints experimental feature, note that this release changes how these types (the union of dynamic and another type; e.g. ~int for the union of dynamic and int) are enforced in argument and return type positions. Previously they were enfoced the same as the dynamic type (i.e. any value would be accepted) but after this release they are enforced as the other type in the union would be (e.g. for ~int only integer values will now be accepted). (commit) See also (commit) for related changes adding new ways to write aspirational, un-enforced types via helpers in the HH\FIXME namespace.