disable runtime enforcement of require class constraints for mock classes
commitfa23fd50c869719a1ce4aa2b75c248dc0686d814
authorFrancesco Zappa Nardelli <fzn@meta.com>
Fri, 21 Oct 2022 18:09:10 +0000 (21 11:09 -0700)
committerFacebook GitHub Bot <facebook-github-bot@users.noreply.github.com>
Fri, 21 Oct 2022 18:09:10 +0000 (21 11:09 -0700)
tree94e13b53ced6a1a0b3f32016e9d6e4b47d320904
parent9e8c17335bca1dc54ad881db92fe5e8f7b9d6c39
disable runtime enforcement of require class constraints for mock classes

Summary:
A trait with a `require class C` constraints can only be used by class `C`, which must be final.  This is enforced by HHVM when loading the class that uses the trait with the constraint.

HHVM enforcement is however too strict in presence of mock classes (see test mock.php in this diff).  This diff disables HHVM enforcement for classes with the `<<__MockClass>>` attribute.

Additionally, this diff improves the error message printed when HHVM enforcement of `require class` constraints detects an error.

Reviewed By: ricklavoie

Differential Revision: D40547447

fbshipit-source-id: 56acc7e2c0a8abdb52b5d465b17b7f8b392bf118
13 files changed:
hphp/runtime/vm/class.cpp
hphp/test/slow/traits/requireclass/mock.php [new file with mode: 0644]
hphp/test/slow/traits/requireclass/mock.php.expectf [new file with mode: 0644]
hphp/test/slow/traits/requireclass/requireclass_abstract_01.bad.php.expectf
hphp/test/slow/traits/requireclass/requireclass_abstract_01.bad.php.expectf-repo
hphp/test/slow/traits/requireclass/requireclass_hierarchy_02.bad.php.expectf
hphp/test/slow/traits/requireclass/requireclass_hierarchy_02.bad.php.expectf-repo
hphp/test/slow/traits/requireclass/requireclass_hierarchy_03.bad.php.expectf
hphp/test/slow/traits/requireclass/requireclass_hierarchy_03.bad.php.expectf-repo
hphp/test/slow/traits/requireclass/requireclass_hierarchy_04.good.php [new file with mode: 0644]
hphp/test/slow/traits/requireclass/requireclass_hierarchy_04.good.php.expectf [new file with mode: 0644]
hphp/test/slow/traits/requireclass/requireclass_nonfinal_01.bad.php.expectf
hphp/test/slow/traits/requireclass/requireclass_nonfinal_01.bad.php.expectf-repo