diff --git a/ext/opcache/Optimizer/sccp.c b/ext/opcache/Optimizer/sccp.c index 25b51b687a4..3c6c54be771 100644 --- a/ext/opcache/Optimizer/sccp.c +++ b/ext/opcache/Optimizer/sccp.c @@ -1249,8 +1249,10 @@ static void sccp_visit_instr(scdf_ctx *scdf, zend_op *opline, zend_ssa_op *ssa_o if (result) { ZVAL_COPY_VALUE(&zv, result); ZVAL_NULL(result); - } else { + } else if (op1 && !IS_PARTIAL_ARRAY(op1)) { array_init(&zv); + } else { + empty_partial_array(&zv); } if (op1) { diff --git a/ext/opcache/tests/opt/sccp_023.phpt b/ext/opcache/tests/opt/sccp_023.phpt new file mode 100644 index 00000000000..edd0c39284f --- /dev/null +++ b/ext/opcache/tests/opt/sccp_023.phpt @@ -0,0 +1,31 @@ +--TEST-- +SCCP 023: ADD_ARRAY_ELEMENT with partial array +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +opcache.optimization_level=0 +opcache.opt_debug_level=0 +--SKIPIF-- + +--FILE-- + [ + 'allowed_values' => $allowed_values, + ], + ]; + + return $settings[$field_type]; +} + +var_dump(a("list_string", ["xxx"])); +?> +--EXPECTF-- +array(1) { + ["allowed_values"]=> + array(1) { + [0]=> + string(3) "xxx" + } +}