@@ -7531,7 +7531,7 @@ ZEND_VM_HANDLER(159, ZEND_DISCARD_EXCEPTION, ANY, ANY)
75317531 ZEND_VM_NEXT_OPCODE ();
75327532}
75337533
7534- ZEND_VM_HANDLER (162 , ZEND_FAST_CALL , JMP_ADDR , TRY_CATCH , FAST_CALL )
7534+ ZEND_VM_HANDLER (162 , ZEND_FAST_CALL , JMP_ADDR , ANY , FAST_CALL )
75357535{
75367536 USE_OPLINE
75377537 zval * fast_call = EX_VAR (opline -> result .var );
@@ -7554,9 +7554,6 @@ ZEND_VM_HANDLER(163, ZEND_FAST_RET, ANY, TRY_CATCH, FAST_RET)
75547554
75557555 if (fast_call -> u2 .lineno != (uint32_t )-1 ) {
75567556 const zend_op * fast_ret = EX (func )-> op_array .opcodes + fast_call -> u2 .lineno ;
7557- if (fast_ret -> extended_value & ZEND_FAST_CALL_FROM_FINALLY ) {
7558- fast_call -> u2 .lineno = EX (func )-> op_array .try_catch_array [fast_ret -> op2 .num ].finally_op - 2 ;
7559- }
75607557 ZEND_VM_SET_OPCODE (fast_ret + 1 );
75617558 ZEND_VM_CONTINUE ();
75627559 } else {
@@ -7565,7 +7562,11 @@ ZEND_VM_HANDLER(163, ZEND_FAST_RET, ANY, TRY_CATCH, FAST_RET)
75657562
75667563 if (opline -> extended_value == ZEND_FAST_RET_TO_FINALLY ) {
75677564 uint32_t finally_op = EX (func )-> op_array .try_catch_array [opline -> op2 .num ].finally_op ;
7565+ uint32_t finally_end = EX (func )-> op_array .try_catch_array [opline -> op2 .num ].finally_end ;
7566+ zval * next_fast_call = EX_VAR (EX (func )-> op_array .opcodes [finally_end ].op1 .var );
75687567
7568+ Z_OBJ_P (next_fast_call ) = Z_OBJ_P (fast_call );
7569+ next_fast_call -> u2 .lineno = (uint32_t )-1 ;
75697570 cleanup_live_vars (execute_data , opline - EX (func )-> op_array .opcodes , finally_op );
75707571 ZEND_VM_SET_OPCODE (& EX (func )-> op_array .opcodes [finally_op ]);
75717572 ZEND_VM_CONTINUE ();
0 commit comments