]> granicus.if.org Git - php/commitdiff
Force type update if the previous value was in register only
authorDmitry Stogov <dmitry@zend.com>
Wed, 29 Jul 2020 22:32:23 +0000 (01:32 +0300)
committerDmitry Stogov <dmitry@zend.com>
Wed, 29 Jul 2020 22:32:23 +0000 (01:32 +0300)
ext/opcache/jit/zend_jit_x86.dasc

index efb0b7f682f7ac6d9d2ebb1e84ad5c3ee3b3f584..5c827f4b99aa75892696101962f562b7a4f18bfa 100644 (file)
@@ -8003,6 +8003,13 @@ static int zend_jit_assign(dasm_State **Dst, const zend_op *opline, const zend_o
                }
        }
 
+       if (Z_MODE(op1_addr) != IS_REG
+        && Z_MODE(op1_use_addr) == IS_REG
+        && !Z_LOAD(op1_use_addr)
+        && !Z_STORE(op1_use_addr)) {
+               /* Force type update */
+               op1_info |= MAY_BE_UNDEF;
+       }
        if (!zend_jit_assign_to_variable(Dst, opline, op_array, op1_addr, op1_info, op1_def_info, opline->op2_type, opline->op2, op2_addr, op2_info, res_addr,
                        may_throw)) {
                return 0;