diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index e0ccd56a5c0..01049f4175a 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -4956,6 +4956,10 @@ static zend_uchar determine_switch_jumptable_type(zend_ast_list *cases) { } static zend_bool should_use_jumptable(zend_ast_list *cases, zend_uchar jumptable_type) { + if (CG(compiler_options) & ZEND_COMPILE_NO_JUMPTABLES) { + return 0; + } + /* Thresholds are chosen based on when the average switch time for equidistributed * input becomes smaller when using the jumptable optimization. */ if (jumptable_type == IS_LONG) { diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index a8244d6b5be..f63b3a755de 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -1048,6 +1048,9 @@ END_EXTERN_C() /* result of compilation may be stored in file cache */ #define ZEND_COMPILE_WITH_FILE_CACHE (1<<11) +/* disable jumptable optimization for switch statements */ +#define ZEND_COMPILE_NO_JUMPTABLES (1<<12) + /* The default value for CG(compiler_options) */ #define ZEND_COMPILE_DEFAULT ZEND_COMPILE_HANDLE_OP_ARRAY