2323 * php zend_vm_gen.php
2424 */
2525
26+ #include <stdint.h>
27+
2628ZEND_VM_HELPER (zend_add_helper , ANY , ANY , zval * op_1 , zval * op_2 )
2729{
2830 USE_OPLINE
@@ -4471,7 +4473,6 @@ ZEND_VM_COLD_CONST_HANDLER(124, ZEND_VERIFY_RETURN_TYPE, CONST|TMP|VAR|UNUSED|CV
44714473#if !ZEND_VM_SPEC || (OP1_TYPE != IS_UNUSED )
44724474 USE_OPLINE
44734475 zval * retval_ref , * retval_ptr ;
4474- zend_arg_info * ret_info = EX (func )-> common .arg_info - 1 ;
44754476 retval_ref = retval_ptr = GET_OP1_ZVAL_PTR_UNDEF (BP_VAR_R );
44764477
44774478 if (OP1_TYPE == IS_CONST ) {
@@ -4486,7 +4487,8 @@ ZEND_VM_COLD_CONST_HANDLER(124, ZEND_VERIFY_RETURN_TYPE, CONST|TMP|VAR|UNUSED|CV
44864487 ZVAL_DEREF (retval_ptr );
44874488 }
44884489
4489- if (EXPECTED (ZEND_TYPE_CONTAINS_CODE (ret_info -> type , Z_TYPE_P (retval_ptr )))) {
4490+ uint32_t pure_type_mask = opline -> extended_value ;
4491+ if (EXPECTED (ZEND_TYPE_MASK_CONTAINS_CODE (pure_type_mask , Z_TYPE_P (retval_ptr )))) {
44904492 ZEND_VM_NEXT_OPCODE ();
44914493 }
44924494
@@ -4496,7 +4498,7 @@ ZEND_VM_COLD_CONST_HANDLER(124, ZEND_VERIFY_RETURN_TYPE, CONST|TMP|VAR|UNUSED|CV
44964498 if (UNEXPECTED (EG (exception ))) {
44974499 HANDLE_EXCEPTION ();
44984500 }
4499- if (ZEND_TYPE_FULL_MASK ( ret_info -> type ) & MAY_BE_NULL ) {
4501+ if (pure_type_mask & MAY_BE_NULL ) {
45004502 ZEND_VM_NEXT_OPCODE ();
45014503 }
45024504 }
@@ -4517,6 +4519,8 @@ ZEND_VM_COLD_CONST_HANDLER(124, ZEND_VERIFY_RETURN_TYPE, CONST|TMP|VAR|UNUSED|CV
45174519 }
45184520 }
45194521
4522+ /* Fetch full return type info from function arg_info */
4523+ const zend_arg_info * ret_info = EX (func )-> common .arg_info - 1 ;
45204524 SAVE_OPLINE ();
45214525 if (UNEXPECTED (!zend_check_type_slow (& ret_info -> type , retval_ptr , ref , 1 , 0 ))) {
45224526 zend_verify_return_error (EX (func ), retval_ptr );
0 commit comments