Skip to content

Commit a3e6735

Browse files
committed
Merge branch 'PHP-7.4' into PHP-8.0
* PHP-7.4: Fixed bug #80900 # Conflicts: # ext/opcache/Optimizer/sccp.c
2 parents 80f921d + 7c6cf09 commit a3e6735

File tree

2 files changed

+57
-1
lines changed

2 files changed

+57
-1
lines changed

ext/opcache/Optimizer/sccp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1983,7 +1983,7 @@ static void sccp_mark_feasible_successors(
19831983
scdf_mark_edge_feasible(scdf, block_num, target);
19841984
return;
19851985
}
1986-
s = 0;
1986+
s = block->successors_count - 1;
19871987
break;
19881988
}
19891989
default:

ext/opcache/tests/bug80900.phpt

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
--TEST--
2+
Bug 80900: Switch constant with incorrect type
3+
--INI--
4+
opcache.enable=1
5+
opcache.enable_cli=1
6+
opcache.optimization_level=-1
7+
--SKIPIF--
8+
<?php require_once('skipif.inc'); ?>
9+
--FILE--
10+
<?php
11+
function switchLong() {
12+
$var = 'foo';
13+
/* The number of case clauses needs to be greater than 5,
14+
* otherwise it will not be compiled into SWITCH_LONG. */
15+
switch ($var) {
16+
case 1:
17+
echo 'no1';
18+
break;
19+
case 2:
20+
echo 'no2';
21+
break;
22+
case 3:
23+
echo 'no3';
24+
break;
25+
case 4:
26+
echo 'no4';
27+
break;
28+
case 5:
29+
echo 'no5';
30+
break;
31+
default:
32+
echo 'yes';
33+
break;
34+
}
35+
echo PHP_EOL;
36+
}
37+
38+
function switchString() {
39+
$var = false;
40+
switch ($var) {
41+
case 'string':
42+
echo 'no';
43+
break;
44+
default:
45+
echo 'yes';
46+
break;
47+
}
48+
echo PHP_EOL;
49+
}
50+
51+
switchLong();
52+
switchString();
53+
?>
54+
--EXPECT--
55+
yes
56+
yes

0 commit comments

Comments
 (0)