com php-src: Avoid dangerous optimization: ext/opcache/Optimize r/block_pass.c
| From: | Dmitry Stogov | Date: | Mon, 06 Jul 2015 13:52:38 +0000 |
| Subject: | com php-src: Avoid dangerous optimization: ext/opcache/Optimize r/block_pass.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-87764@lists.php.net to get a copy of this message | ||
Commit: 436b01e3797860add57a524b4492f8451b60ac68
Author: Dmitry Stogov <dmitry@zend.com> Mon, 6 Jul 2015 16:52:38 +0300
Parents: 1a9f4f90da8fc6e91a1ac38addfa68556de89d4e
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=436b01e3797860add57a524b4492f8451b60ac68
Log:
Avoid dangerous optimization
Changed paths:
M ext/opcache/Optimizer/block_pass.c
Diff:
diff --git a/ext/opcache/Optimizer/block_pass.c b/ext/opcache/Optimizer/block_pass.c
index ee9bda6..e1e07ea 100644
--- a/ext/opcache/Optimizer/block_pass.c
+++ b/ext/opcache/Optimizer/block_pass.c
@@ -762,7 +762,8 @@ static void zend_optimize_block(zend_code_block *block, zend_op_array *op_array,
*/
if (opline->opcode == ZEND_IS_EQUAL ||
opline->opcode == ZEND_IS_NOT_EQUAL ||
- opline->opcode == ZEND_CASE) {
+ /* CASE variable will be deleted later by FREE, so we can't optimize it */
+ (opline->opcode == ZEND_CASE && (ZEND_OP1_TYPE(opline) & (IS_CONST|IS_CV)))) {
if (ZEND_OP1_TYPE(opline) == IS_CONST &&
(Z_TYPE(ZEND_OP1_LITERAL(opline)) == IS_FALSE ||
Z_TYPE(ZEND_OP1_LITERAL(opline)) == IS_TRUE)) {