diff --git a/Zend/zend_opcode.c b/Zend/zend_opcode.c index 6681ef7b684..78c4adf82d5 100644 --- a/Zend/zend_opcode.c +++ b/Zend/zend_opcode.c @@ -767,13 +767,13 @@ static zend_bool keeps_op1_alive(zend_op *opline) { if (opline->opcode == ZEND_CASE || opline->opcode == ZEND_CASE_STRICT || opline->opcode == ZEND_SWITCH_LONG + || opline->opcode == ZEND_SWITCH_STRING || opline->opcode == ZEND_MATCH || opline->opcode == ZEND_FETCH_LIST_R || opline->opcode == ZEND_COPY_TMP) { return 1; } - ZEND_ASSERT(opline->opcode != ZEND_SWITCH_STRING - && opline->opcode != ZEND_FE_FETCH_R + ZEND_ASSERT(opline->opcode != ZEND_FE_FETCH_R && opline->opcode != ZEND_FE_FETCH_RW && opline->opcode != ZEND_FETCH_LIST_W && opline->opcode != ZEND_VERIFY_RETURN_TYPE diff --git a/ext/opcache/tests/switch_string_free_opt.phpt b/ext/opcache/tests/switch_string_free_opt.phpt new file mode 100644 index 00000000000..9baacfed3ae --- /dev/null +++ b/ext/opcache/tests/switch_string_free_opt.phpt @@ -0,0 +1,15 @@ +--TEST-- +A SWITCH_STRING operand FREE may be optimized away +--FILE-- +l; + default: + } +} +?> +===DONE=== +--EXPECT-- +===DONE===