From d16d251e2047b8364a188f676452dc2c1f6f42ab Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Fri, 15 Apr 2022 23:11:47 +0200 Subject: [PATCH] Move MAY_BE_REF check into COPY_SSA_OBJ_TYPE ZEND_ASSIGN is not the only place where this is relevant, so handle it generically inside COPY_SSA_OBJ_TYPE instead. --- ext/opcache/Optimizer/zend_inference.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/ext/opcache/Optimizer/zend_inference.c b/ext/opcache/Optimizer/zend_inference.c index 53a6408b904..119ee91cd62 100644 --- a/ext/opcache/Optimizer/zend_inference.c +++ b/ext/opcache/Optimizer/zend_inference.c @@ -1741,7 +1741,7 @@ static uint32_t get_ssa_alias_types(zend_ssa_alias_kind alias) { #define COPY_SSA_OBJ_TYPE(from_var, to_var) do { \ if ((from_var) >= 0 && (ssa_var_info[(from_var)].type & MAY_BE_OBJECT) \ - && ssa_var_info[(from_var)].ce) { \ + && ssa_var_info[(from_var)].ce && !(ssa_var_info[(to_var)].type & MAY_BE_REF)) { \ UPDATE_SSA_OBJ_TYPE(ssa_var_info[(from_var)].ce, \ ssa_var_info[(from_var)].is_instanceof, (to_var)); \ } else { \ @@ -2740,11 +2740,7 @@ static zend_always_inline int _zend_update_type_info( tmp |= MAY_BE_DOUBLE; } UPDATE_SSA_TYPE(tmp, ssa_op->op1_def); - if (tmp & MAY_BE_REF) { - UPDATE_SSA_OBJ_TYPE(NULL, 0, ssa_op->op1_def); - } else { - COPY_SSA_OBJ_TYPE(ssa_op->op2_use, ssa_op->op1_def); - } + COPY_SSA_OBJ_TYPE(ssa_op->op2_use, ssa_op->op1_def); } if (ssa_op->result_def >= 0) { if (tmp & MAY_BE_REF) {