return FAILURE;
}
- if (zend_ssa_escape_analysis(ctx->script, op_array, ssa) != SUCCESS) {
+ if (zend_ssa_find_sccs(op_array, ssa) != SUCCESS){
return FAILURE;
}
- if (zend_ssa_find_sccs(op_array, ssa) != SUCCESS){
+ if (zend_ssa_inference(&ctx->arena, op_array, ctx->script, ssa) != SUCCESS) {
return FAILURE;
}
- if (zend_ssa_inference(&ctx->arena, op_array, ctx->script, ssa) != SUCCESS) {
+ if (zend_ssa_escape_analysis(ctx->script, op_array, ssa) != SUCCESS) {
return FAILURE;
}
!(ce->ce_flags & ZEND_ACC_INHERITED)) {
return 1;
}
- }
+ }
break;
case ZEND_QM_ASSIGN:
if (opline->op1_type == IS_CONST
&& Z_TYPE_P(CRT_CONSTANT_EX(op_array, opline->op1, ssa->rt_constants)) == IS_ARRAY) {
return 1;
}
+ if (opline->op1_type == IS_CV && (OP1_INFO() & MAY_BE_ARRAY)) {
+ return 1;
+ }
+ break;
+ case ZEND_ASSIGN:
+ if (opline->op1_type == IS_CV && (OP1_INFO() & MAY_BE_ARRAY)) {
+ return 1;
+ }
break;
}
} else if (op->op1_def == var) {
&& Z_TYPE_P(CRT_CONSTANT_EX(op_array, opline->op2, ssa->rt_constants)) == IS_ARRAY) {
return 1;
}
+ if (opline->op2_type == IS_CV && (OP2_INFO() & MAY_BE_ARRAY)) {
+ return 1;
+ }
break;
case ZEND_ASSIGN_DIM:
case ZEND_ASSIGN_OBJ:
<?php require_once('skipif.inc'); ?>
--FILE--
<?php
-function foo() {
- $a = [];
- $b = $a;
+function foo(int $x) {
$a[0] = 5;
+ $a[1] = $x;
+ $b = $a;
$b[0] = 42;
return $a[0];
}
; %ssccp_017.php:1-10
L0: RETURN int(1)
-foo: ; (lines=1, args=0, vars=0, tmps=0)
+foo: ; (lines=2, args=1, vars=1, tmps=0)
; (after optimizer)
; %ssccp_017.php:2-8
-L0: RETURN int(5)
+L0: CV0($x) = RECV 1
+L1: RETURN int(5)
--- /dev/null
+--TEST--
+SCCP 019: Array assignemnt
+--INI--
+opcache.enable=1
+opcache.enable_cli=1
+opcache.optimization_level=-1
+opcache.opt_debug_level=0x20000
+--SKIPIF--
+<?php require_once('skipif.inc'); ?>
+--FILE--
+<?php
+function foo(int $x) {
+ $a[0] = 5;
+ $a[1] = $x;
+ $b = $a;
+ return $b[0];
+}
+?>
+--EXPECTF--
+$_main: ; (lines=1, args=0, vars=0, tmps=0)
+ ; (after optimizer)
+ ; %ssccp_019.php:1-9
+L0: RETURN int(1)
+
+foo: ; (lines=2, args=1, vars=1, tmps=0)
+ ; (after optimizer)
+ ; %ssccp_019.php:2-7
+L0: CV0($x) = RECV 1
+L1: RETURN int(5)