From 586dc07a8a3ea0a1769dc83189a3d2d9a6b77b4a Mon Sep 17 00:00:00 2001 From: Nuno Lopes Date: Sun, 31 Mar 2013 15:43:08 -0400 Subject: [PATCH 1/2] fix coverage data for the opcache optimizer --- Makefile.gcov | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.gcov b/Makefile.gcov index 79d7a6d7190..37c1b4b44c2 100644 --- a/Makefile.gcov +++ b/Makefile.gcov @@ -14,7 +14,7 @@ php_lcov.info: lcov-test @rm -rf lcov_data/ @$(mkinstalldirs) lcov_data/ @echo - -@files=`find . -name \*.gcda -o -name \*.gcno -o -name \*.da -o -name \*.h | sed -e 's/^\.\///' | sed -e 's/\.gcda//g' -e 's/\.gcno//g' -e 's/\.da//g' | $(EGREP) $(LCOV_INCLUDE) | uniq` ;\ + -@files=`find . -name \*.gcda -o -name \*.gcno -o -name \*.da -o -name \*.c -o -name \*.h | sed -e 's/^\.\///' | sed -e 's/\.gcda//g' -e 's/\.gcno//g' -e 's/\.da//g' | $(EGREP) $(LCOV_INCLUDE) | uniq` ;\ for x in $$files; do \ echo -n . ;\ y=`echo $$x | sed -e 's!\.libs/!!'`; \ From 74f158fb9dd198b1064e8f2064e264ec55d5bec7 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Mon, 1 Apr 2013 11:33:04 +0400 Subject: [PATCH 2/2] Fixed issue #79 (Optimization Problem/Bug) --- ext/opcache/Optimizer/block_pass.c | 12 +++++++++++ ext/opcache/tests/issue0079.phpt | 34 ++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 ext/opcache/tests/issue0079.phpt diff --git a/ext/opcache/Optimizer/block_pass.c b/ext/opcache/Optimizer/block_pass.c index 7fd986ca6de..61a2b59d2f8 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 00000000000..4458fce5bc0 --- /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-- + +--FILE-- +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)