Skip to content

Commit 1e4a9a4

Browse files
committed
Merge branch 'PHP-8.0' into PHP-8.1
* PHP-8.0: Fix block marking for two arm math
2 parents f2ae8a3 + 17d6efc commit 1e4a9a4

File tree

2 files changed

+23
-13
lines changed

2 files changed

+23
-13
lines changed

Zend/Optimizer/zend_cfg.c

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,15 @@ static void zend_mark_reachable(zend_op *opcodes, zend_cfg *cfg, zend_basic_bloc
4242

4343
if (b->len != 0) {
4444
zend_uchar opcode = opcodes[b->start + b->len - 1].opcode;
45-
if (b->successors_count == 1) {
45+
if (opcode == ZEND_MATCH) {
46+
succ->flags |= ZEND_BB_TARGET;
47+
} else if (opcode == ZEND_SWITCH_LONG || opcode == ZEND_SWITCH_STRING) {
48+
if (i == b->successors_count - 1) {
49+
succ->flags |= ZEND_BB_FOLLOW | ZEND_BB_TARGET;
50+
} else {
51+
succ->flags |= ZEND_BB_TARGET;
52+
}
53+
} else if (b->successors_count == 1) {
4654
if (opcode == ZEND_JMP) {
4755
succ->flags |= ZEND_BB_TARGET;
4856
} else {
@@ -66,23 +74,13 @@ static void zend_mark_reachable(zend_op *opcodes, zend_cfg *cfg, zend_basic_bloc
6674
}
6775
}
6876
}
69-
} else if (b->successors_count == 2) {
77+
} else {
78+
ZEND_ASSERT(b->successors_count == 2);
7079
if (i == 0 || opcode == ZEND_JMPZNZ) {
7180
succ->flags |= ZEND_BB_TARGET;
7281
} else {
7382
succ->flags |= ZEND_BB_FOLLOW;
7483
}
75-
} else {
76-
ZEND_ASSERT(
77-
opcode == ZEND_SWITCH_LONG
78-
|| opcode == ZEND_SWITCH_STRING
79-
|| opcode == ZEND_MATCH
80-
);
81-
if (i == b->successors_count - 1) {
82-
succ->flags |= ZEND_BB_FOLLOW | ZEND_BB_TARGET;
83-
} else {
84-
succ->flags |= ZEND_BB_TARGET;
85-
}
8684
}
8785
} else {
8886
succ->flags |= ZEND_BB_FOLLOW;

Zend/tests/match/044.phpt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
--TEST--
2+
Incorrect cfg block marking for two arm match
3+
--FILE--
4+
<?php
5+
$x = 2;
6+
var_dump(match ($x) {
7+
2,2 => 'x',
8+
default => 'y',
9+
});
10+
?>
11+
--EXPECT--
12+
string(1) "x"

0 commit comments

Comments
 (0)