]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-7.4'
authorNikita Popov <nikita.ppv@gmail.com>
Tue, 7 Jul 2020 07:57:07 +0000 (09:57 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Tue, 7 Jul 2020 07:57:07 +0000 (09:57 +0200)
* PHP-7.4:
  Fixed bug #79783

1  2 
Zend/zend_compile.c

index ea5baf2a126b1d3d08c1f8c4a405ea67c53e76e7,10ea65f89d9ab3a5b350afc9929cd611d15e69e4..95342cc8e2768dcf0cf2ef81b6a6d0061ae4733c
@@@ -3197,26 -3004,30 +3197,30 @@@ uint32_t zend_compile_args(zend_ast *as
                }
  
                arg_count++;
 -              if (zend_is_variable_or_call(arg)) {
 -                      if (zend_is_call(arg)) {
 -                              zend_compile_var(&arg_node, arg, BP_VAR_R, 0);
 -                              if (arg_node.op_type & (IS_CONST|IS_TMP_VAR)) {
 -                                      /* Function call was converted into builtin instruction */
 -                                      if (!fbc || ARG_MUST_BE_SENT_BY_REF(fbc, arg_num)) {
 -                                              opcode = ZEND_SEND_VAL_EX;
 -                                      } else {
 -                                              opcode = ZEND_SEND_VAL;
 -                                      }
 +              if (zend_is_call(arg)) {
 +                      zend_compile_var(&arg_node, arg, BP_VAR_R, 0);
 +                      if (arg_node.op_type & (IS_CONST|IS_TMP_VAR)) {
 +                              /* Function call was converted into builtin instruction */
-                               opcode = ZEND_SEND_VAL;
++                              if (!fbc || ARG_MUST_BE_SENT_BY_REF(fbc, arg_num)) {
++                                      opcode = ZEND_SEND_VAL_EX;
+                               } else {
 -                                      if (fbc) {
 -                                              if (ARG_MUST_BE_SENT_BY_REF(fbc, arg_num)) {
 -                                                      opcode = ZEND_SEND_VAR_NO_REF;
 -                                              } else if (ARG_MAY_BE_SENT_BY_REF(fbc, arg_num)) {
 -                                                      opcode = ZEND_SEND_VAL;
 -                                              } else {
 -                                                      opcode = ZEND_SEND_VAR;
 -                                              }
++                                      opcode = ZEND_SEND_VAL;
++                              }
 +                      } else {
 +                              if (fbc) {
 +                                      if (ARG_MUST_BE_SENT_BY_REF(fbc, arg_num)) {
 +                                              opcode = ZEND_SEND_VAR_NO_REF;
 +                                      } else if (ARG_MAY_BE_SENT_BY_REF(fbc, arg_num)) {
 +                                              opcode = ZEND_SEND_VAL;
                                        } else {
 -                                              opcode = ZEND_SEND_VAR_NO_REF_EX;
 +                                              opcode = ZEND_SEND_VAR;
                                        }
 +                              } else {
 +                                      opcode = ZEND_SEND_VAR_NO_REF_EX;
                                }
 -                      } else if (fbc) {
 +                      }
 +              } else if (zend_is_variable(arg)) {
 +                      if (fbc) {
                                if (ARG_SHOULD_BE_SENT_BY_REF(fbc, arg_num)) {
                                        zend_compile_var(&arg_node, arg, BP_VAR_W, 1);
                                        opcode = ZEND_SEND_REF;