Skip to content

Commit dcccdc4

Browse files
committed
Don't require NO_ESCAPE for partial arrays in SCCP
1 parent 5de750f commit dcccdc4

File tree

1 file changed

+7
-13
lines changed

1 file changed

+7
-13
lines changed

ext/opcache/Optimizer/sccp.c

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1135,8 +1135,7 @@ static void sccp_visit_instr(scdf_ctx *scdf, zend_op *opline, zend_ssa_op *ssa_o
11351135
if (op2 && IS_BOT(op2)) {
11361136
/* Update of unknown index */
11371137
SET_RESULT_BOT(result);
1138-
if (ssa_op->op1_def >= 0
1139-
&& ctx->scdf.ssa->vars[ssa_op->op1_def].escape_state == ESCAPE_STATE_NO_ESCAPE) {
1138+
if (ssa_op->op1_def >= 0) {
11401139
empty_partial_array(&zv);
11411140
SET_RESULT(op1, &zv);
11421141
zval_ptr_dtor_nogc(&zv);
@@ -1153,8 +1152,7 @@ static void sccp_visit_instr(scdf_ctx *scdf, zend_op *opline, zend_ssa_op *ssa_o
11531152
|| Z_TYPE_P(op1) == IS_NULL
11541153
|| Z_TYPE_P(op1) == IS_FALSE
11551154
|| Z_TYPE_P(op1) == IS_ARRAY)
1156-
&& ssa_op->op1_def >= 0
1157-
&& ctx->scdf.ssa->vars[ssa_op->op1_def].escape_state == ESCAPE_STATE_NO_ESCAPE) {
1155+
&& ssa_op->op1_def >= 0) {
11581156

11591157
if (Z_TYPE_P(op1) == IS_NULL || Z_TYPE_P(op1) == IS_FALSE) {
11601158
empty_partial_array(&zv);
@@ -1333,8 +1331,7 @@ static void sccp_visit_instr(scdf_ctx *scdf, zend_op *opline, zend_ssa_op *ssa_o
13331331
if (op2 && IS_BOT(op2)) {
13341332
/* Update of unknown index */
13351333
SET_RESULT_BOT(op1);
1336-
if (ssa_op->result_def >= 0
1337-
&& ctx->scdf.ssa->vars[ssa_op->result_def].escape_state == ESCAPE_STATE_NO_ESCAPE) {
1334+
if (ssa_op->result_def >= 0) {
13381335
empty_partial_array(&zv);
13391336
SET_RESULT(result, &zv);
13401337
zval_ptr_dtor_nogc(&zv);
@@ -1348,8 +1345,7 @@ static void sccp_visit_instr(scdf_ctx *scdf, zend_op *opline, zend_ssa_op *ssa_o
13481345
|| (opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) {
13491346

13501347
SET_RESULT_BOT(op1);
1351-
if (ssa_op->result_def >= 0
1352-
&& ctx->scdf.ssa->vars[ssa_op->result_def].escape_state == ESCAPE_STATE_NO_ESCAPE) {
1348+
if (ssa_op->result_def >= 0) {
13531349
if (!result) {
13541350
empty_partial_array(&zv);
13551351
} else {
@@ -1505,9 +1501,7 @@ static void sccp_visit_instr(scdf_ctx *scdf, zend_op *opline, zend_ssa_op *ssa_o
15051501
}
15061502
} else if (opline->extended_value == ZEND_ASSIGN_DIM) {
15071503
if ((IS_PARTIAL_ARRAY(op1) || Z_TYPE_P(op1) == IS_ARRAY)
1508-
&& ssa_op->op1_def >= 0
1509-
&& ctx->scdf.ssa->vars[ssa_op->op1_def].escape_state == ESCAPE_STATE_NO_ESCAPE
1510-
&& op2) {
1504+
&& ssa_op->op1_def >= 0 && op2) {
15111505
zval tmp;
15121506
zval *data = get_op1_value(ctx, opline+1, ssa_op+1);
15131507

@@ -2126,7 +2120,7 @@ static void join_phi_values(zval *a, zval *b, zend_bool escape) {
21262120
return;
21272121
}
21282122
if (IS_PARTIAL_ARRAY(a) || IS_PARTIAL_ARRAY(b)) {
2129-
if (escape || join_partial_arrays(a, b) != SUCCESS) {
2123+
if (join_partial_arrays(a, b) != SUCCESS) {
21302124
zval_ptr_dtor_nogc(a);
21312125
MAKE_BOT(a);
21322126
}
@@ -2136,7 +2130,7 @@ static void join_phi_values(zval *a, zval *b, zend_bool escape) {
21362130
MAKE_BOT(a);
21372131
}
21382132
} else if (!zend_is_identical(a, b)) {
2139-
if (escape || join_partial_arrays(a, b) != SUCCESS) {
2133+
if (join_partial_arrays(a, b) != SUCCESS) {
21402134
zval_ptr_dtor_nogc(a);
21412135
MAKE_BOT(a);
21422136
}

0 commit comments

Comments
 (0)