diff --git a/ext/opcache/ZendAccelerator.c b/ext/opcache/ZendAccelerator.c index a3c079d0f0c..7eee9819cee 100644 --- a/ext/opcache/ZendAccelerator.c +++ b/ext/opcache/ZendAccelerator.c @@ -4190,16 +4190,12 @@ static int preload_optimize(zend_persistent_script *script) } ZEND_HASH_FOREACH_PTR(&script->script.class_table, ce) { - if (ce->num_traits) { - preload_fix_trait_methods(ce); - } + preload_fix_trait_methods(ce); } ZEND_HASH_FOREACH_END(); ZEND_HASH_FOREACH_PTR(preload_scripts, script) { ZEND_HASH_FOREACH_PTR(&script->script.class_table, ce) { - if (ce->num_traits) { - preload_fix_trait_methods(ce); - } + preload_fix_trait_methods(ce); } ZEND_HASH_FOREACH_END(); } ZEND_HASH_FOREACH_END(); diff --git a/ext/opcache/tests/preload_trait_multiple_fixup.inc b/ext/opcache/tests/preload_trait_multiple_fixup.inc index 5ccb1237a3b..c6c20237254 100644 --- a/ext/opcache/tests/preload_trait_multiple_fixup.inc +++ b/ext/opcache/tests/preload_trait_multiple_fixup.inc @@ -17,3 +17,17 @@ class C1 { class C2 extends C1 { use T2; } + +trait T3 { + public function method() { + // Prevent trivial inheritance. + static $x; + // Needs to be optimized somehow. + $str = "Foo"; + echo "$str\n"; + } +} +class C3 { + use T3; +} +class C4 extends C3 {} diff --git a/ext/opcache/tests/preload_trait_multiple_fixup.phpt b/ext/opcache/tests/preload_trait_multiple_fixup.phpt index a63458ecc90..dbee2595c21 100644 --- a/ext/opcache/tests/preload_trait_multiple_fixup.phpt +++ b/ext/opcache/tests/preload_trait_multiple_fixup.phpt @@ -13,6 +13,8 @@ if (PHP_OS_FAMILY == 'Windows') die('skip Preloading is not supported on Windows --FILE-- method(); +(new C4)->method(); ?> --EXPECT-- Foo +Foo