From: Nikita Popov Date: Tue, 3 Nov 2020 09:55:59 +0000 (+0100) Subject: Preserve trait method alias name during preloading X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6f2431860b309df87d8a4d977b0a0bfb05182855;p=php Preserve trait method alias name during preloading --- diff --git a/ext/opcache/ZendAccelerator.c b/ext/opcache/ZendAccelerator.c index 22b484b789..39d04f9a95 100644 --- a/ext/opcache/ZendAccelerator.c +++ b/ext/opcache/ZendAccelerator.c @@ -4147,11 +4147,13 @@ static void preload_fix_trait_methods(zend_class_entry *ce) if (op_array->fn_flags & ZEND_ACC_TRAIT_CLONE) { zend_op_array *orig_op_array = zend_shared_alloc_get_xlat_entry(op_array->opcodes); if (orig_op_array) { + zend_string *function_name = op_array->function_name; zend_class_entry *scope = op_array->scope; uint32_t fn_flags = op_array->fn_flags; zend_function *prototype = op_array->prototype; HashTable *ht = op_array->static_variables; *op_array = *orig_op_array; + op_array->function_name = function_name; op_array->scope = scope; op_array->fn_flags = fn_flags; op_array->prototype = prototype; diff --git a/ext/opcache/tests/preload.inc b/ext/opcache/tests/preload.inc index 52bb60e348..0ef3b4f56e 100644 --- a/ext/opcache/tests/preload.inc +++ b/ext/opcache/tests/preload.inc @@ -45,6 +45,12 @@ class Z { class Z2 extends Z {} +class TraitAliasTest { + use T1 { + T1::foo as bar; + } +} + function get_anon() { return new class {}; } diff --git a/ext/opcache/tests/preload_trait_alias.phpt b/ext/opcache/tests/preload_trait_alias.phpt new file mode 100644 index 0000000000..89b843cd76 --- /dev/null +++ b/ext/opcache/tests/preload_trait_alias.phpt @@ -0,0 +1,23 @@ +--TEST-- +Preloading trait uses with aliased names +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +opcache.optimization_level=-1 +opcache.preload={PWD}/preload.inc +--SKIPIF-- + +--FILE-- + +--EXPECT-- +array(2) { + [0]=> + string(3) "bar" + [1]=> + string(3) "foo" +}