]> granicus.if.org Git - php/commitdiff
Do not include zend_verify_return_type in executable ops (phpdbg)
authorBob Weinand <bobwei9@hotmail.com>
Fri, 2 Oct 2015 09:43:52 +0000 (11:43 +0200)
committerBob Weinand <bobwei9@hotmail.com>
Fri, 2 Oct 2015 10:37:39 +0000 (12:37 +0200)
Zend/zend_compile.c
sapi/phpdbg/phpdbg.c

index ce3815c8649518bc9dc2da4d325659cbf76f2b31..98af0a7c7464036ccd2605fab30560fbc8264968 100644 (file)
@@ -2042,6 +2042,7 @@ static void zend_emit_return_type_check(znode *expr, zend_arg_info *return_info)
 void zend_emit_final_return(zval *zv) /* {{{ */
 {
        znode zn;
+       zend_op *ret;
        zend_bool returns_reference = (CG(active_op_array)->fn_flags & ZEND_ACC_RETURN_REFERENCE) != 0;
 
        if (CG(active_op_array)->fn_flags & ZEND_ACC_HAS_RETURN_TYPE) {
@@ -2055,7 +2056,8 @@ void zend_emit_final_return(zval *zv) /* {{{ */
                ZVAL_NULL(&zn.u.constant);
        }
 
-       zend_emit_op(NULL, returns_reference ? ZEND_RETURN_BY_REF : ZEND_RETURN, &zn, NULL);
+       ret = zend_emit_op(NULL, returns_reference ? ZEND_RETURN_BY_REF : ZEND_RETURN, &zn, NULL);
+       ret->extended_value = -1;
 }
 /* }}} */
 
index cc3de4286f20a00798653ca21a1b67a5502138c7..30edec4634e32c702bc0a24ddc5ff3f1dae4e3a8 100644 (file)
@@ -443,14 +443,14 @@ static void phpdbg_oplog_fill_executable(zend_op_array *op_array, HashTable *ins
        ZVAL_LONG(&zero, 0);
 
        /* ignore autogenerated return (well, not too precise with finally branches, but that's okay) */
-       if (op_array->last >= 1 && (end - 1)->opcode == ZEND_RETURN
-        && ((op_array->last > 1 && ((end - 2)->opcode == ZEND_RETURN || (end - 2)->opcode == ZEND_GENERATOR_RETURN || (end - 2)->opcode == ZEND_THROW))
-         || op_array->function_name == NULL)) {
+       if (op_array->last >= 1 && (((end - 1)->opcode == ZEND_RETURN || (end - 1)->opcode == ZEND_RETURN_BY_REF || (end - 1)->opcode == ZEND_GENERATOR_RETURN)
+        && ((op_array->last > 1 && ((end - 2)->opcode == ZEND_RETURN || (end - 2)->opcode == ZEND_RETURN_BY_REF || (end - 2)->opcode == ZEND_GENERATOR_RETURN || (end - 2)->opcode == ZEND_THROW))
+         || op_array->function_name == NULL || (end - 1)->extended_value == -1))) {
                end--;
        }
 
        for (; cur < end; cur++) {
-               if (cur->opcode == ZEND_NOP || cur->opcode == ZEND_OP_DATA || cur->opcode == ZEND_FE_FREE || cur->opcode == ZEND_FREE || cur->opcode == ZEND_ASSERT_CHECK
+               if (cur->opcode == ZEND_NOP || cur->opcode == ZEND_OP_DATA || cur->opcode == ZEND_FE_FREE || cur->opcode == ZEND_FREE || cur->opcode == ZEND_ASSERT_CHECK || cur->opcode == ZEND_VERIFY_RETURN_TYPE
                 || cur->opcode == ZEND_DECLARE_CONST || cur->opcode == ZEND_DECLARE_CLASS || cur->opcode == ZEND_DECLARE_INHERITED_CLASS || cur->opcode == ZEND_DECLARE_FUNCTION
                 || cur->opcode == ZEND_DECLARE_INHERITED_CLASS_DELAYED || cur->opcode == ZEND_VERIFY_ABSTRACT_CLASS || cur->opcode == ZEND_ADD_TRAIT || cur->opcode == ZEND_BIND_TRAITS
                 || cur->opcode == ZEND_DECLARE_ANON_CLASS || cur->opcode == ZEND_DECLARE_ANON_INHERITED_CLASS || cur->opcode == ZEND_FAST_RET || cur->opcode == ZEND_TICKS