Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
A virtual machine designed for executing programs written in Hack and PHP.
C++ PHP Hack C OCaml CMake Other

finalize Closure methods in the IDL

Summary: user-supplied code is not supposed to be extending Closure.

one way to trick the runtime into allowing "class X extends Closure" is to override the constructor to prevent the parent (`c_Closure::t___construct()`) from erroring out.

this creates two ways of crashing:
- by overriding the constructor, a Closure object can be created without the `CreateCl` bytecode being executed, thus c_Closure::init() is never run. `c_Closure->m_func` is `nullptr`. `var_dump($closure_obj)` enters `c_Closure::t__debuginfo()` and null is dereferenced. stack trace from such a crash P19780626.
- hhbbc expects that classes that extend Closure have one and only one method named __invoke. stack traces from this crash P19780671 and P19780675

this diff does not directly address the hhbbc assertions.

Reviewed By: @markw65

Differential Revision: D1949712
latest commit 024fbf90e5
@billf billf authored hhvm-bot committed


HHVM page | Hacklang page | General group | Dev group | Twitter

HHVM (aka the HipHop Virtual Machine) is an open-source virtual machine designed for executing programs written in Hack and PHP. HHVM uses a just-in-time compilation approach to achieve superior performance while maintaining the flexibility that PHP developers are accustomed to. To date, HHVM (and its predecessor HPHPc before it) has realized over a 9x increase in web request throughput and over a 5x reduction in memory consumption for Facebook compared with the PHP 5.2 engine + APC.

HHVM should be used together with a FastCGI-based webserver like nginx or apache.


Our FAQ has answers to many common questions about HHVM, from general questions to questions geared towards those that want to use or contribute to HHVM.


If you're new, try our getting started overview.

You can install a prebuilt package or compile from source.


You can run standalone programs just by passing them to hhvm: hhvm my_script.php.

If you want to host a website:

  • Install your favorite webserver
  • Install our package
  • Start your webserver
  • Run sudo /etc/init.d/hhvm start
  • Visit your site at http://.../index.php

Our getting started overview provides a slightly more detailed introduction as well as links to more information.


We'd love to have your help in making HHVM better. If you're interested, please read our guide to contributing.


HHVM is licensed under the PHP and Zend licenses except as otherwise noted.

The Hack typechecker (hphp/hack) is licensed under the BSD license (hphp/hack/LICENSE) with an additional grant of patent rights (hphp/hack/PATENTS) except as otherwise noted.

Reporting Crashes

See Reporting Crashes for helpful tips on how to report crashes in an actionable manner.

Something went wrong with that request. Please try again.