| jmp >2
|.code
|2:
- } else if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-MAY_BE_LONG)) {
- | IF_NOT_ZVAL_TYPE op1_addr, IS_LONG, >3
+ } else {
+ if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-MAY_BE_LONG)) {
+ | IF_NOT_ZVAL_TYPE op1_addr, IS_LONG, >3
+ }
| GET_ZVAL_LVAL ZREG_FCARG2a, op1_addr
}
if (HT_IS_PACKED(jumptable)) {
| jmp >2
|.code
|2:
- } else if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-MAY_BE_STRING)) {
- | IF_NOT_ZVAL_TYPE op1_addr, IS_STRING, >3
+ } else {
+ if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-MAY_BE_STRING)) {
+ | IF_NOT_ZVAL_TYPE op1_addr, IS_STRING, >3
+ }
| GET_ZVAL_PTR FCARG2a, op1_addr
}
| LOAD_ADDR FCARG1a, jumptable
--- /dev/null
+--TEST--
+Switch jumptable generation
+--INI--
+opcache.enable=1
+opcache.enable_cli=1
+opcache.file_update_protection=0
+opcache.jit_buffer_size=1M
+--FILE--
+<?php
+
+function test1(string $val) {
+ switch ($val) {
+ case 'str1':
+ case 'str2':
+ echo "correct\n";
+ return;
+ }
+ echo "wrong\n";
+}
+function test2(int $val) {
+ switch ($val) {
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ echo "correct\n";
+ return;
+ }
+ echo "wrong\n";
+}
+test1("str1");
+test2(1);
+
+?>
+--EXPECT--
+correct
+correct