summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2020-06-29 09:52:37 +0200
committerNikita Popov <nikita.ppv@gmail.com>2020-06-29 09:52:37 +0200
commitfabcd9f14e52567fa41df189298c388336277b54 (patch)
treee483906e5aa69d9b810a18f8fb4531c56f108993
parent978cdb736a2a43c9e1473b14aa4a1f62ed96f820 (diff)
downloadphp-git-fabcd9f14e52567fa41df189298c388336277b54.tar.gz
Don't inline static call to instance method
Fixes the failure in bug79740.phpt with opcache.
-rw-r--r--ext/opcache/Optimizer/optimize_func_calls.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/ext/opcache/Optimizer/optimize_func_calls.c b/ext/opcache/Optimizer/optimize_func_calls.c
index ae707a2409..6af7865e92 100644
--- a/ext/opcache/Optimizer/optimize_func_calls.c
+++ b/ext/opcache/Optimizer/optimize_func_calls.c
@@ -106,6 +106,12 @@ static void zend_try_inline_call(zend_op_array *op_array, zend_op *fcall, zend_o
uint32_t i, num_args = func->op_array.num_args;
num_args += (func->op_array.fn_flags & ZEND_ACC_VARIADIC) != 0;
+ if (fcall->opcode == ZEND_INIT_STATIC_METHOD_CALL
+ && !(func->op_array.fn_flags & ZEND_ACC_STATIC)) {
+ /* Don't inline static call to instance method. */
+ return;
+ }
+
if (fcall->opcode == ZEND_INIT_METHOD_CALL && fcall->op1_type == IS_UNUSED) {
/* TODO: we can't inlne methods, because $this may be used
* not in object context ???