Skip to content

Commit d1dd474

Browse files
committed
Fixed bug #72523 (dtrace issue with reflection (failed test))
1 parent acdafc0 commit d1dd474

File tree

4 files changed

+22
-2
lines changed

4 files changed

+22
-2
lines changed

NEWS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ PHP NEWS
33
?? ??? 2016, PHP 7.1.0beta1
44

55
- Core:
6+
. Fixed bug #72523 (dtrace issue with reflection (failed test)). (Laruence)
67
. Fixed bug #72508 (strange references after recursive function call and
78
"switch" statement). (Laruence)
89

Zend/tests/generators/bug72523.phpt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
--TEST--
2+
Bug #72523 (dtrace issue with reflection (failed test))
3+
--FILE--
4+
<?php
5+
6+
$gen = (new class() {
7+
function a() {
8+
yield "okey";
9+
}
10+
})->a();
11+
12+
var_dump($gen->current());
13+
?>
14+
--EXPECT--
15+
string(4) "okey"

Zend/zend_vm_def.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4046,7 +4046,9 @@ ZEND_VM_HANDLER(41, ZEND_GENERATOR_CREATE, ANY, ANY)
40464046
gen_execute_data->return_value = (zval*)generator;
40474047
call_info = Z_TYPE_INFO(EX(This));
40484048
if ((call_info & Z_TYPE_MASK) == IS_OBJECT
4049-
&& !(call_info & ((ZEND_CALL_CLOSURE|ZEND_CALL_RELEASE_THIS) << ZEND_CALL_INFO_SHIFT))) {
4049+
&& (!(call_info & ((ZEND_CALL_CLOSURE|ZEND_CALL_RELEASE_THIS) << ZEND_CALL_INFO_SHIFT))
4050+
/* Bug #72523 */
4051+
|| UNEXPECTED(zend_execute_ex != execute_ex))) {
40504052
ZEND_ADD_CALL_FLAG_EX(call_info, ZEND_CALL_RELEASE_THIS);
40514053
Z_ADDREF(gen_execute_data->This);
40524054
}

Zend/zend_vm_execute.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1205,7 +1205,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_CREATE_SPEC_HANDLER(
12051205
gen_execute_data->return_value = (zval*)generator;
12061206
call_info = Z_TYPE_INFO(EX(This));
12071207
if ((call_info & Z_TYPE_MASK) == IS_OBJECT
1208-
&& !(call_info & ((ZEND_CALL_CLOSURE|ZEND_CALL_RELEASE_THIS) << ZEND_CALL_INFO_SHIFT))) {
1208+
&& (!(call_info & ((ZEND_CALL_CLOSURE|ZEND_CALL_RELEASE_THIS) << ZEND_CALL_INFO_SHIFT))
1209+
/* Bug #72523 */
1210+
|| UNEXPECTED(zend_execute_ex != execute_ex))) {
12091211
ZEND_ADD_CALL_FLAG_EX(call_info, ZEND_CALL_RELEASE_THIS);
12101212
Z_ADDREF(gen_execute_data->This);
12111213
}

0 commit comments

Comments
 (0)