Skip to content

Commit 71a45be

Browse files
committed
Merge branch 'PHP-5.5'
* PHP-5.5: Fixed issue #79 (Optimization Problem/Bug) fix coverage data for the opcache optimizer
2 parents ed54776 + 74f158f commit 71a45be

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

ext/opcache/Optimizer/block_pass.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1312,6 +1312,12 @@ static void zend_jmp_optimization(zend_code_block *block, zend_op_array *op_arra
13121312
if (ZEND_OP1_TYPE(last_op) == IS_CONST) {
13131313
zval_copy_ctor(&ZEND_OP1_LITERAL(last_op));
13141314
}
1315+
#else
1316+
if (ZEND_OP1_TYPE(last_op) == IS_CONST) {
1317+
zval zv = ZEND_OP1_LITERAL(last_op);
1318+
zval_copy_ctor(&zv);
1319+
last_op->op1.constant = zend_optimizer_add_literal(op_array, &zv TSRMLS_CC);
1320+
}
13151321
#endif
13161322
del_source(block, block->op1_to);
13171323
if (block->op1_to->op2_to) {
@@ -1342,6 +1348,12 @@ static void zend_jmp_optimization(zend_code_block *block, zend_op_array *op_arra
13421348
if (ZEND_OP1_TYPE(last_op) == IS_CONST) {
13431349
zval_copy_ctor(&ZEND_OP1_LITERAL(last_op));
13441350
}
1351+
#else
1352+
if (ZEND_OP1_TYPE(last_op) == IS_CONST) {
1353+
zval zv = ZEND_OP1_LITERAL(last_op);
1354+
zval_copy_ctor(&zv);
1355+
last_op->op1.constant = zend_optimizer_add_literal(op_array, &zv TSRMLS_CC);
1356+
}
13451357
#endif
13461358
del_source(block, block->op1_to);
13471359
block->op1_to = NULL;

ext/opcache/tests/issue0079.phpt

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
--TEST--
2+
ISSUE #79 (Optimization Problem/Bug)
3+
--INI--
4+
opcache.enable=1
5+
opcache.enable_cli=1
6+
opcache.optimization_level=-1
7+
--SKIPIF--
8+
<?php require_once('skipif.inc'); ?>
9+
--FILE--
10+
<?php
11+
class Test {
12+
public function run() {
13+
$r = $this->my_parse_m();
14+
var_dump ($r);
15+
return $r;
16+
}
17+
18+
public function my_parse_m() {
19+
$test = true;
20+
if ($test === true) {
21+
$a = 'b';
22+
} else {
23+
return false;
24+
}
25+
// flush();
26+
return true;
27+
}
28+
}
29+
30+
$t = new Test();
31+
var_dump ($t->run());
32+
--EXPECT--
33+
bool(true)
34+
bool(true)

0 commit comments

Comments
 (0)