com php-src: Fixed issue #79 (Optimization Problem/Bug): ext/opcache/Optimizer/block_pass.c ext/opcache/tests/issu e0079.phpt
| From: | Dmitry Stogov | Date: | Mon, 01 Apr 2013 07:33:04 +0000 |
| Subject: | com php-src: Fixed issue #79 (Optimization Problem/Bug): ext/opcache/Optimizer/block_pass.c ext/opcache/tests/issu e0079.phpt | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-71820@lists.php.net to get a copy of this message | ||
Commit: 74f158fb9dd198b1064e8f2064e264ec55d5bec7
Author: Dmitry Stogov <dmitry@zend.com> Mon, 1 Apr 2013 11:33:04 +0400
Parents: 586dc07a8a3ea0a1769dc83189a3d2d9a6b77b4a
Branches: PHP-5.5 master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=74f158fb9dd198b1064e8f2064e264ec55d5bec7
Log:
Fixed issue #79 (Optimization Problem/Bug)
Bugs:
https://bugs.php.net/79
Changed paths:
M ext/opcache/Optimizer/block_pass.c
A ext/opcache/tests/issue0079.phpt
Diff:
diff --git a/ext/opcache/Optimizer/block_pass.c b/ext/opcache/Optimizer/block_pass.c
index 7fd986c..61a2b59 100644
--- a/ext/opcache/Optimizer/block_pass.c
+++ b/ext/opcache/Optimizer/block_pass.c
@@ -1312,6 +1312,12 @@ static void zend_jmp_optimization(zend_code_block *block, zend_op_array
*op_arra
if (ZEND_OP1_TYPE(last_op) == IS_CONST) {
zval_copy_ctor(&ZEND_OP1_LITERAL(last_op));
}
+#else
+ if (ZEND_OP1_TYPE(last_op) == IS_CONST) {
+ zval zv = ZEND_OP1_LITERAL(last_op);
+ zval_copy_ctor(&zv);
+ last_op->op1.constant = zend_optimizer_add_literal(op_array, &zv TSRMLS_CC);
+ }
#endif
del_source(block, block->op1_to);
if (block->op1_to->op2_to) {
@@ -1342,6 +1348,12 @@ static void zend_jmp_optimization(zend_code_block *block, zend_op_array
*op_arra
if (ZEND_OP1_TYPE(last_op) == IS_CONST) {
zval_copy_ctor(&ZEND_OP1_LITERAL(last_op));
}
+#else
+ if (ZEND_OP1_TYPE(last_op) == IS_CONST) {
+ zval zv = ZEND_OP1_LITERAL(last_op);
+ zval_copy_ctor(&zv);
+ last_op->op1.constant = zend_optimizer_add_literal(op_array, &zv TSRMLS_CC);
+ }
#endif
del_source(block, block->op1_to);
block->op1_to = NULL;
diff --git a/ext/opcache/tests/issue0079.phpt b/ext/opcache/tests/issue0079.phpt
new file mode 100644
index 0000000..4458fce
--- /dev/null
+++ b/ext/opcache/tests/issue0079.phpt
@@ -0,0 +1,34 @@
+--TEST--
+ISSUE #79 (Optimization Problem/Bug)
+--INI--
+opcache.enable=1
+opcache.enable_cli=1
+opcache.optimization_level=-1
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+class Test {
+ public function run() {
+ $r = $this->my_parse_m();
+ var_dump ($r);
+ return $r;
+ }
+
+ public function my_parse_m() {
+ $test = true;
+ if ($test === true) {
+ $a = 'b';
+ } else {
+ return false;
+ }
+// flush();
+ return true;
+ }
+}
+
+$t = new Test();
+var_dump ($t->run());
+--EXPECT--
+bool(true)
+bool(true)