Skip to content

Commit 5279185

Browse files
authored
Fix internal return type check with gcov (GH-21653)
ZEND_ASSERT() is a no-op with gcov. Move zend_verify_internal_return_type() out of ZEND_ASSERT().
1 parent 40804a6 commit 5279185

File tree

3 files changed

+108
-54
lines changed

3 files changed

+108
-54
lines changed

Zend/zend_execute_API.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1025,8 +1025,10 @@ zend_result zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_
10251025
if (should_throw) {
10261026
zend_internal_call_arginfo_violation(call->func);
10271027
}
1028-
ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
1029-
zend_verify_internal_return_type(call->func, fci->retval));
1028+
if (call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) {
1029+
bool result = zend_verify_internal_return_type(call->func, fci->retval);
1030+
ZEND_ASSERT(result);
1031+
}
10301032
ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
10311033
? Z_ISREF_P(fci->retval) : !Z_ISREF_P(fci->retval));
10321034
}

Zend/zend_vm_def.h

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4154,8 +4154,10 @@ ZEND_VM_HOT_HANDLER(129, ZEND_DO_ICALL, ANY, ANY, SPEC(RETVAL,OBSERVER))
41544154
if (should_throw) {
41554155
zend_internal_call_arginfo_violation(call->func);
41564156
}
4157-
ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
4158-
zend_verify_internal_return_type(call->func, ret));
4157+
if (call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) {
4158+
bool result = zend_verify_internal_return_type(call->func, ret);
4159+
ZEND_ASSERT(result);
4160+
}
41594161
ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
41604162
? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
41614163
zend_verify_internal_func_info(call->func, ret);
@@ -4283,8 +4285,10 @@ ZEND_VM_HOT_HANDLER(131, ZEND_DO_FCALL_BY_NAME, ANY, ANY, SPEC(RETVAL,OBSERVER))
42834285
if (should_throw) {
42844286
zend_internal_call_arginfo_violation(call->func);
42854287
}
4286-
ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
4287-
zend_verify_internal_return_type(call->func, ret));
4288+
if (call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) {
4289+
bool result = zend_verify_internal_return_type(call->func, ret);
4290+
ZEND_ASSERT(result);
4291+
}
42884292
ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
42894293
? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
42904294
zend_verify_internal_func_info(call->func, ret);
@@ -4412,8 +4416,10 @@ ZEND_VM_HOT_HANDLER(60, ZEND_DO_FCALL, ANY, ANY, SPEC(RETVAL,OBSERVER))
44124416
if (should_throw) {
44134417
zend_internal_call_arginfo_violation(call->func);
44144418
}
4415-
ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
4416-
zend_verify_internal_return_type(call->func, ret));
4419+
if (call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) {
4420+
bool result = zend_verify_internal_return_type(call->func, ret);
4421+
ZEND_ASSERT(result);
4422+
}
44174423
ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
44184424
? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
44194425
zend_verify_internal_func_info(call->func, ret);
@@ -9119,8 +9125,10 @@ ZEND_VM_HANDLER(158, ZEND_CALL_TRAMPOLINE, ANY, ANY, SPEC(OBSERVER))
91199125
if (should_throw) {
91209126
zend_internal_call_arginfo_violation(call->func);
91219127
}
9122-
ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) ||
9123-
zend_verify_internal_return_type(call->func, ret));
9128+
if (call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) {
9129+
bool result = zend_verify_internal_return_type(call->func, ret);
9130+
ZEND_ASSERT(result);
9131+
}
91249132
ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE)
91259133
? Z_ISREF_P(ret) : !Z_ISREF_P(ret));
91269134
zend_verify_internal_func_info(call->func, ret);

Zend/zend_vm_execute.h

Lines changed: 88 additions & 44 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)