Add runtime enforcement for instance properties
commit6c7d8b60e836766c07c861e10e98d503fc0b5f69
authorJames Wu <jjwu@fb.com>
Tue, 6 Sep 2022 02:57:38 +0000 (5 19:57 -0700)
committerFacebook GitHub Bot <facebook-github-bot@users.noreply.github.com>
Tue, 6 Sep 2022 02:57:38 +0000 (5 19:57 -0700)
treeb2fe6edccd42aab3453ede59c207c83944b8c81e
parentd98a5f2d20e0374817d448dbaf072e61e599fe76
Add runtime enforcement for instance properties

Summary:
This diff adds interpreter and jit support for enforcing internal on instance properties.

In general for property enforcement, when the property is statically known, we can check the modules check statically and easily. When it isn't, we always fall back to C++ code using minstr-helpers.cpp. Therefore, the implementation in the jit is rather straightforward.

- If we have a propInfo, we statically check that propInfo for modularity violations.
- If we don't, we default to using minstr-helpers.cpp, which calls the same C++ helpers as the interpreter code.

Reviewed By: oulgen

Differential Revision: D38639723

fbshipit-source-id: ee94b612063479cc3ab61deb39137c5c91fe0508
45 files changed:
hphp/doc/ir.specification
hphp/runtime/base/object-data.cpp
hphp/runtime/vm/class.cpp
hphp/runtime/vm/class.h
hphp/runtime/vm/jit/dce.cpp
hphp/runtime/vm/jit/extra-data.h
hphp/runtime/vm/jit/ir-opcode.cpp
hphp/runtime/vm/jit/irgen-call.cpp
hphp/runtime/vm/jit/irgen-call.h
hphp/runtime/vm/jit/irgen-minstr.cpp
hphp/runtime/vm/jit/irlower-exception.cpp
hphp/runtime/vm/jit/memory-effects.cpp
hphp/runtime/vm/module.cpp
hphp/runtime/vm/runtime.cpp
hphp/runtime/vm/runtime.h
hphp/test/slow/modules/instance-properties-incdec-throw.php [new file with mode: 0644]
hphp/test/slow/modules/instance-properties-incdec-throw.php.expectf [new file with mode: 0644]
hphp/test/slow/modules/instance-properties-incdec-throw.php.hphp_opts [new file with mode: 0644]
hphp/test/slow/modules/instance-properties-incdec-throw.php.opts [new file with mode: 0644]
hphp/test/slow/modules/instance-properties-incdec.php [new file with mode: 0644]
hphp/test/slow/modules/instance-properties-incdec.php.expectf [new file with mode: 0644]
hphp/test/slow/modules/instance-properties-incdec.php.hphp_opts [new file with mode: 0644]
hphp/test/slow/modules/instance-properties-throw-2.php [new file with mode: 0644]
hphp/test/slow/modules/instance-properties-throw-2.php.expectf [new file with mode: 0644]
hphp/test/slow/modules/instance-properties-throw-2.php.hphp_opts [new file with mode: 0644]
hphp/test/slow/modules/instance-properties-throw-2.php.opts [new file with mode: 0644]
hphp/test/slow/modules/instance-properties-throw-3.php [new file with mode: 0644]
hphp/test/slow/modules/instance-properties-throw-3.php.expectf [new file with mode: 0644]
hphp/test/slow/modules/instance-properties-throw-3.php.hphp_opts [new file with mode: 0644]
hphp/test/slow/modules/instance-properties-throw-3.php.opts [new file with mode: 0644]
hphp/test/slow/modules/instance-properties-throw.php [new file with mode: 0644]
hphp/test/slow/modules/instance-properties-throw.php.expectf [new file with mode: 0644]
hphp/test/slow/modules/instance-properties-throw.php.hphp_opts [new file with mode: 0644]
hphp/test/slow/modules/instance-properties-throw.php.opts [new file with mode: 0644]
hphp/test/slow/modules/instance-properties.inc [new file with mode: 0644]
hphp/test/slow/modules/instance-properties.php [new file with mode: 0644]
hphp/test/slow/modules/instance-properties.php.expectf [new file with mode: 0644]
hphp/test/slow/modules/instance-properties.php.hphp_opts [new file with mode: 0644]
hphp/test/slow/modules/instance-properties2.php [new file with mode: 0644]
hphp/test/slow/modules/instance-properties2.php.expectf [new file with mode: 0644]
hphp/test/slow/modules/instance-properties2.php.hphp_opts [new file with mode: 0644]
hphp/test/slow/modules/instance-properties3.php [new file with mode: 0644]
hphp/test/slow/modules/instance-properties3.php.expectf [new file with mode: 0644]
hphp/test/slow/modules/instance-properties3.php.hphp_opts [new file with mode: 0644]
hphp/test/slow/modules/module.inc [new file with mode: 0644]