diff --git a/ext/opcache/Optimizer/sccp.c b/ext/opcache/Optimizer/sccp.c index 1791f6a941dc3..b25f3a08e7c0e 100644 --- a/ext/opcache/Optimizer/sccp.c +++ b/ext/opcache/Optimizer/sccp.c @@ -1798,7 +1798,7 @@ static void sccp_visit_instr(scdf_ctx *scdf, zend_op *opline, zend_ssa_op *ssa_o args[i] = get_op1_value(ctx, opline, &ctx->scdf.ssa->ops[opline - ctx->scdf.op_array->opcodes]); if (args[i]) { - if (IS_BOT(args[i])) { + if (IS_BOT(args[i]) || IS_PARTIAL_ARRAY(args[i])) { SET_RESULT_BOT(result); return; } else if (IS_TOP(args[i])) { diff --git a/ext/opcache/tests/bug78015.phpt b/ext/opcache/tests/bug78015.phpt index 9bb416e7b396c..b2ecceacdeb0c 100644 --- a/ext/opcache/tests/bug78015.phpt +++ b/ext/opcache/tests/bug78015.phpt @@ -71,6 +71,12 @@ function test8($array) { return $ret[0]; } +function test9() { + global $x; + $a = ['b' => [$x]]; + return serialize($a['b']); +} + var_dump(test1()); var_dump(test2()); var_dump(test3()); @@ -79,6 +85,7 @@ var_dump(test5()); var_dump(test6()); var_dump(test7()); var_dump(test8([1])); +var_dump(test9()); ?> --EXPECTF-- @@ -103,3 +110,4 @@ array(2) { ["y"]=> int(1) } +string(14) "a:1:{i:0;i:1;}"