} else {
zend_ssa_var *var = &ssa->vars[ssa_op->result_def];
if (var->use_chain < 0 && var->phi_use_chain == NULL) {
- ssa_op->result_def = -1;
if (opline->result_type & (IS_TMP_VAR|IS_VAR)) {
zend_optimizer_remove_live_range_ex(op_array, opline->result.var, var->definition);
}
- zend_ssa_unlink_use_chain(ssa, opline - op_array->opcodes, ssa_op->op1_use);
- ssa_op->op1_use = -1;
- ssa_op->op1_use_chain = -1;
opline->opcode = ZEND_JMP;
+ opline->result_type = IS_UNUSED;
+ zend_ssa_remove_result_def(ssa, ssa_op);
COPY_NODE(opline->op1, opline->op2);
take_successor_0(ssa, block_num, block);
goto optimize_jmp;
--- /dev/null
+--TEST--
+Incorrect empty basic block elimination
+--INI--
+opcache.enable_cli=1
+opcache.optimization_level=-1
+--FILE--
+<?php
+
+function test() {
+ $foo = "test";
+ var_dump($foo ?? "default");
+}
+test();
+
+?>
+--EXPECT--
+string(4) "test"