]> granicus.if.org Git - php/commitdiff
Fix bug #78154 with JIT
authorNikita Popov <nikita.ppv@gmail.com>
Thu, 13 Jun 2019 09:53:31 +0000 (11:53 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Thu, 13 Jun 2019 09:53:31 +0000 (11:53 +0200)
ext/opcache/jit/zend_jit_helpers.c
ext/opcache/jit/zend_jit_x86.dasc

index 231870de7344f340a13738dbf7c8f70f2d3496c6..98da0523b50073f05a1f356d5bd7623a94516ee2 100644 (file)
@@ -1635,3 +1635,9 @@ static void ZEND_FASTCALL zend_jit_post_dec_typed_ref(zval *var_ptr, zend_refere
                ZVAL_COPY_VALUE(var_ptr, ret);
        }
 }
+
+static void ZEND_FASTCALL zend_jit_only_vars_by_reference(zval *arg)
+{
+       ZVAL_NEW_REF(arg, arg);
+       zend_error(E_NOTICE, "Only variables should be passed by reference");
+}
index 714abe2cc24d0f42c78a67877d7445a14832862a..1d57ea30bb2f38a429effebcbf4515d4386e5b27 100644 (file)
@@ -8023,14 +8023,12 @@ static int zend_jit_send_var(dasm_State **Dst, const zend_op *opline, zend_op_ar
                        |       jnz >7
                        |       SAVE_VALID_OPLINE opline
                        |.if X64
-                               |       mov CARG1, E_NOTICE
-                               |       LOAD_ADDR CARG2, "Only variables should be passed by reference"
-                               |       EXT_CALL zend_error, r0
+                               |       LOAD_ZVAL_ADDR CARG1, arg_addr
+                               |       EXT_CALL zend_jit_only_vars_by_reference, r0
                        |.else
                                |       sub r4, 8
-                               |       push "Only variables should be passed by reference"
-                               |       push E_NOTICE
-                               |       EXT_CALL zend_error, r0
+                               |       PUSH_ZVAL_ADDR arg_addr, r0
+                               |       EXT_CALL zend_jit_only_vars_by_reference, r0
                                |       add r4, 16
                        |.endif
                        if (!zend_jit_check_exception(Dst)) {
@@ -8070,14 +8068,12 @@ static int zend_jit_send_var(dasm_State **Dst, const zend_op *opline, zend_op_ar
                }
                |       SAVE_VALID_OPLINE opline
                |.if X64
-                       |       mov CARG1, E_NOTICE
-                       |       LOAD_ADDR CARG2, "Only variables should be passed by reference"
-                       |       EXT_CALL zend_error, r0
+                       |       LOAD_ZVAL_ADDR CARG1, arg_addr
+                       |       EXT_CALL zend_jit_only_vars_by_reference, r0
                |.else
                        |       sub r4, 8
-                       |       push "Only variables should be passed by reference"
-                       |       push E_NOTICE
-                       |       EXT_CALL zend_error, r0
+                       |       PUSH_ZVAL_ADDR arg_addr, r0
+                       |       EXT_CALL zend_jit_only_vars_by_reference, r0
                        |       add r4, 16
                |.endif
                if (!zend_jit_check_exception(Dst)) {