From 04f06e8cf28e1a9dff54b84fb10bc403bb2f91be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20D=C3=BCsterhus?= Date: Mon, 6 Apr 2026 14:46:15 +0200 Subject: [PATCH 1/6] zend_portability: Remove `EMPTY_SWITCH_DEFAULT_CASE()` (#20063) There are several issues with this macro: - It is incorrectly named: It's not an empty default case. It's an unreachable default case. - It is hiding control flow in its definition, which can be confusing for humans and tools (such as Coccinelle) alike, because it looks like it would be a statement that belongs to the "current" case rather than opening a new one. Since this macro is exactly as long as explicitly spelling out its definition (excluding the useless `break;`), it is not even making the code any more succinct. --- UPGRADING.INTERNALS | 2 ++ Zend/Optimizer/sccp.c | 2 +- Zend/Optimizer/zend_inference.c | 10 +++--- Zend/zend_API.c | 4 +-- Zend/zend_ast.c | 26 +++++++------- Zend/zend_compile.c | 36 +++++++++---------- Zend/zend_compile.h | 2 +- Zend/zend_execute.c | 10 +++--- Zend/zend_execute_API.c | 2 +- Zend/zend_inheritance.c | 2 +- Zend/zend_ini_parser.y | 2 +- Zend/zend_operators.c | 22 ++++++------ Zend/zend_portability.h | 4 --- Zend/zend_smart_str.c | 2 +- Zend/zend_string.h | 2 +- Zend/zend_vm_def.h | 2 +- Zend/zend_vm_execute.h | 12 +++---- ext/bcmath/bcmath.c | 10 +++--- ext/bcmath/libbcmath/src/round.c | 2 +- ext/bz2/bz2.c | 2 +- ext/date/php_date.c | 8 ++--- ext/dom/element.c | 8 ++--- ext/dom/html5_parser.c | 2 +- ext/dom/inner_outer_html_mixin.c | 2 +- ext/dom/lexbor/selectors-adapted/selectors.c | 4 +-- ext/dom/node.c | 2 +- ext/gd/gd.c | 6 ++-- ext/gmp/gmp.c | 4 +-- ext/intl/formatter/formatter_format.cpp | 2 +- ext/intl/resourcebundle/resourcebundle.cpp | 2 +- ext/ldap/ldap.c | 2 +- ext/mbstring/libmbfl/filters/mbfilter_cjk.c | 10 +++--- ext/mbstring/libmbfl/filters/mbfilter_utf7.c | 4 +-- .../libmbfl/filters/mbfilter_utf7imap.c | 4 +-- ext/mbstring/mbstring.c | 2 +- ext/mbstring/php_unicode.c | 2 +- ext/mysqli/mysqli.c | 2 +- ext/opcache/jit/zend_jit.c | 2 +- ext/opcache/jit/zend_jit_helpers.c | 2 +- ext/opcache/jit/zend_jit_ir.c | 2 +- ext/openssl/openssl_backend_common.c | 2 +- ext/pcre/php_pcre.c | 2 +- ext/pdo/pdo_stmt.c | 6 ++-- ext/pdo_firebird/firebird_statement.c | 2 +- ext/pgsql/pgsql.c | 10 +++--- ext/reflection/php_reflection.c | 4 +-- ext/standard/array.c | 2 +- ext/standard/http.c | 2 +- ext/standard/math.c | 12 +++---- ext/standard/proc_open.c | 2 +- ext/tidy/tidy.c | 2 +- ext/uri/php_uri_common.c | 2 +- ext/uri/php_uri_common.h | 2 +- ext/uri/uri_parser_php_parse_url.c | 2 +- ext/uri/uri_parser_rfc3986.c | 2 +- ext/uri/uri_parser_whatwg.c | 6 ++-- ext/xmlreader/php_xmlreader.c | 2 +- ext/zend_test/test.c | 4 +-- ext/zlib/zlib.c | 4 +-- sapi/cli/php_cli_server.c | 2 +- sapi/phpdbg/phpdbg_out.c | 2 +- sapi/phpdbg/phpdbg_win.c | 2 +- 62 files changed, 151 insertions(+), 153 deletions(-) diff --git a/UPGRADING.INTERNALS b/UPGRADING.INTERNALS index 8eb380b387a46..5da8d205be74b 100644 --- a/UPGRADING.INTERNALS +++ b/UPGRADING.INTERNALS @@ -86,6 +86,8 @@ PHP 8.6 INTERNALS UPGRADE NOTES . The unused ZEND_AST_PARENT_PROPERTY_HOOK_CALL has been removed. . ZEND_AST_METHOD_REFERENCE has been renamed to ZEND_AST_TRAIT_METHOD_REFERENCE. + . The EMPTY_SWITCH_DEFAULT_CASE() macro has been removed. Use + default: ZEND_UNREACHABLE(); instead. ======================== 2. Build system changes diff --git a/Zend/Optimizer/sccp.c b/Zend/Optimizer/sccp.c index 1457e7467cf7c..0758c4d0faf23 100644 --- a/Zend/Optimizer/sccp.c +++ b/Zend/Optimizer/sccp.c @@ -1596,7 +1596,7 @@ static void sccp_visit_instr(scdf_ctx *scdf, zend_op *opline, zend_ssa_op *ssa_o case ZEND_SHORT_CIRCUITING_CHAIN_EMPTY: ZVAL_TRUE(&zv); break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } SET_RESULT(result, &zv); break; diff --git a/Zend/Optimizer/zend_inference.c b/Zend/Optimizer/zend_inference.c index c19d864f1bd02..601b37a868afd 100644 --- a/Zend/Optimizer/zend_inference.c +++ b/Zend/Optimizer/zend_inference.c @@ -1063,7 +1063,7 @@ static bool zend_inference_calc_binary_op_range( case ZEND_BW_XOR: // TODO break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } return 0; } @@ -2350,7 +2350,7 @@ static uint32_t binary_op_result_type( /* TODO: +MAY_BE_OBJECT ??? */ tmp = MAY_BE_STRING | MAY_BE_RC1 | MAY_BE_RCN; break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } return tmp; } @@ -3708,7 +3708,7 @@ static zend_always_inline zend_result _zend_update_type_info( case ZEND_FREE: /* This may happen if the using opcode is DCEd. */ break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } j = zend_ssa_next_use(ssa->ops, ssa_op->result_def, j); if (j >= 0) { @@ -5294,10 +5294,10 @@ ZEND_API bool zend_may_throw_ex(const zend_op *opline, const zend_ssa_op *ssa_op return (t1 & MAY_BE_OBJECT); case IS_OBJECT: return 0; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } /* GCC is getting confused here for the Wimplicit-fallthrough warning with - * EMPTY_SWITCH_DEFAULT_CASE() macro */ + * default: ZEND_UNREACHABLE(); macro */ return 0; case ZEND_ARRAY_KEY_EXISTS: if ((t2 & MAY_BE_ANY) != MAY_BE_ARRAY) { diff --git a/Zend/zend_API.c b/Zend/zend_API.c index 7363a4a120395..4d4ba2652866f 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -126,7 +126,7 @@ ZEND_API const char *zend_get_type_by_const(int type) /* {{{ */ return "mixed"; case _IS_NUMBER: return "int|float"; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } /* }}} */ @@ -262,7 +262,7 @@ ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_error(int error_code, case ZPP_ERROR_FAILURE: ZEND_ASSERT(EG(exception) && "Should have produced an error already"); break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } /* }}} */ diff --git a/Zend/zend_ast.c b/Zend/zend_ast.c index 97c9eee9ae588..cc4a2a8226fe6 100644 --- a/Zend/zend_ast.c +++ b/Zend/zend_ast.c @@ -814,7 +814,7 @@ static zend_result ZEND_FASTCALL zend_ast_evaluate_inner( case IS_OBJECT: zend_cast_zval_to_object(result, &op1, IS_VAR); break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } zval_ptr_dtor_nogc(&op1); if (UNEXPECTED(EG(exception))) { @@ -1240,7 +1240,7 @@ static zend_result ZEND_FASTCALL zend_ast_evaluate_inner( break; } - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } zend_create_fake_closure(result, fptr, fptr->common.scope, called_scope, NULL); @@ -1961,7 +1961,7 @@ static ZEND_COLD void zend_ast_export_zval(smart_str *str, const zval *zv, int p case IS_CONSTANT_AST: zend_ast_export_ex(str, Z_ASTVAL_P(zv), priority, indent); break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } } @@ -2396,7 +2396,7 @@ static ZEND_COLD void zend_ast_export_ex(smart_str *str, zend_ast *ast, int prio case T_PROPERTY_C: APPEND_STR("__PROPERTY__"); case T_NS_C: APPEND_STR("__NAMESPACE__"); case T_CLASS_C: APPEND_STR("__CLASS__"); - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } break; case ZEND_AST_TYPE: @@ -2405,7 +2405,7 @@ static ZEND_COLD void zend_ast_export_ex(smart_str *str, zend_ast *ast, int prio case IS_CALLABLE: APPEND_STR("callable"); case IS_STATIC: APPEND_STR("static"); case IS_MIXED: APPEND_STR("mixed"); - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } break; case ZEND_AST_PLACEHOLDER_ARG: @@ -2439,7 +2439,7 @@ static ZEND_COLD void zend_ast_export_ex(smart_str *str, zend_ast *ast, int prio case IS_STRING: PREFIX_OP("(string)", 240, 241); case IS_ARRAY: PREFIX_OP("(array)", 240, 241); case IS_OBJECT: PREFIX_OP("(object)", 240, 241); - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } break; case ZEND_AST_CAST_VOID: @@ -2473,14 +2473,14 @@ static ZEND_COLD void zend_ast_export_ex(smart_str *str, zend_ast *ast, int prio case ZEND_REQUIRE_ONCE: FUNC_OP("require_once"); case ZEND_REQUIRE: FUNC_OP("require"); case ZEND_EVAL: FUNC_OP("eval"); - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } break; case ZEND_AST_UNARY_OP: switch (ast->attr) { case ZEND_BW_NOT: PREFIX_OP("~", 240, 241); case ZEND_BOOL_NOT: PREFIX_OP("!", 240, 241); - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } break; case ZEND_AST_PRE_INC: @@ -2575,7 +2575,7 @@ static ZEND_COLD void zend_ast_export_ex(smart_str *str, zend_ast *ast, int prio case ZEND_FETCH_CLASS_PARENT: smart_str_append(str, ZSTR_KNOWN(ZEND_STR_PARENT)); break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } else { zend_ast_export_ns_name(str, ast->child[0], 0, indent); @@ -2598,7 +2598,7 @@ static ZEND_COLD void zend_ast_export_ex(smart_str *str, zend_ast *ast, int prio case ZEND_BW_AND: BINARY_OP(" &= ", 90, 91, 90); case ZEND_BW_XOR: BINARY_OP(" ^= ", 90, 91, 90); case ZEND_POW: BINARY_OP(" **= ", 90, 91, 90); - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } break; case ZEND_AST_ASSIGN_COALESCE: BINARY_OP(" \?\?= ", 90, 91, 90); @@ -2624,7 +2624,7 @@ static ZEND_COLD void zend_ast_export_ex(smart_str *str, zend_ast *ast, int prio case ZEND_POW: BINARY_OP(" ** ", 250, 251, 250); case ZEND_BOOL_XOR: BINARY_OP(" xor ", 40, 40, 41); case ZEND_SPACESHIP: BINARY_OP(" <=> ", 180, 181, 181); - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } break; case ZEND_AST_GREATER: BINARY_OP(" > ", 180, 181, 181); @@ -2976,7 +2976,7 @@ static ZEND_COLD void zend_ast_export_ex(smart_str *str, zend_ast *ast, int prio zend_ast_export_indent(str, indent); smart_str_appendc(str, '}'); break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } return; @@ -3073,7 +3073,7 @@ zend_ast * ZEND_FASTCALL zend_ast_with_attributes(zend_ast *ast, zend_ast *attr) * zend_compile_const_decl() checks the kind of the list elements. */ ast = zend_ast_list_add(ast, attr); break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } return ast; diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index b88d5b9d98769..cebcec3c5b392 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -891,7 +891,7 @@ static const char *zend_modifier_token_to_string(uint32_t token) return "protected(set)"; case T_PRIVATE_SET: return "private(set)"; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } @@ -1834,7 +1834,7 @@ static bool zend_try_compile_const_expr_resolve_class_name(zval *zv, zend_ast *c case ZEND_FETCH_CLASS_DEFAULT: ZVAL_STR(zv, zend_resolve_class_name_ast(class_ast)); return 1; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } /* }}} */ @@ -2281,7 +2281,7 @@ static void zend_adjust_for_fetch_type(zend_op *opline, znode *result, uint32_t case BP_VAR_UNSET: opline->opcode += 5 * factor; return; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } /* }}} */ @@ -2444,7 +2444,7 @@ static inline void zend_update_jump_target(uint32_t opnum_jump, uint32_t opnum_t case ZEND_JMP_FRAMELESS: opline->op2.opline_num = opnum_target; break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } /* }}} */ @@ -3594,7 +3594,7 @@ static void zend_compile_assign(znode *result, zend_ast *ast, bool stmt, uint32_ result->op_type = IS_UNUSED; } return; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } } /* }}} */ @@ -3750,7 +3750,7 @@ static void zend_compile_compound_assign(znode *result, zend_ast *ast) /* {{{ */ opline = zend_emit_op_data(&expr_node); opline->extended_value = cache_slot; return; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } /* }}} */ @@ -5012,7 +5012,7 @@ static zend_result zend_compile_func_sprintf(znode *result, zend_ast_list *args) case 'd': zend_emit_op_tmp(&elements[placeholder_count], ZEND_CAST, &elements[placeholder_count], NULL)->extended_value = IS_LONG; break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } if (rope_elements == 0) { @@ -5329,7 +5329,7 @@ static const char *zend_get_cstring_from_property_hook_kind(zend_property_hook_k return "get"; case ZEND_PROPERTY_HOOK_SET: return "set"; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } @@ -5879,7 +5879,7 @@ static void zend_compile_unset(const zend_ast *ast) /* {{{ */ opline = zend_compile_static_prop(NULL, var_ast, BP_VAR_UNSET, false, false); opline->opcode = ZEND_UNSET_STATIC_PROP; return; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } /* }}} */ @@ -9465,7 +9465,7 @@ static void zend_compile_use_trait(const zend_ast *ast) /* {{{ */ case ZEND_AST_TRAIT_ALIAS: zend_compile_trait_alias(adaptation_ast); break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } } @@ -9837,7 +9837,7 @@ static HashTable *zend_get_import_ht(uint32_t type) /* {{{ */ zend_hash_init(FC(imports_const), 8, NULL, str_dtor, 0); } return FC(imports_const); - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } return NULL; @@ -9853,7 +9853,7 @@ static char *zend_get_use_type_str(uint32_t type) /* {{{ */ return " function"; case ZEND_SYMBOL_CONST: return " const"; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } return " unknown"; @@ -10219,7 +10219,7 @@ static bool zend_try_ct_eval_magic_const(zval *zv, const zend_ast *ast) /* {{{ * ZVAL_EMPTY_STRING(zv); } break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } return 1; @@ -10961,7 +10961,7 @@ static void zend_compile_assign_coalesce(znode *result, zend_ast *ast) /* {{{ */ zend_emit_op_data(&default_node); assign_node = var_node_w; break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } opline = zend_emit_op_tmp(NULL, ZEND_QM_ASSIGN, &assign_node, NULL); @@ -11181,7 +11181,7 @@ static void zend_compile_isset_or_empty(znode *result, const zend_ast *ast) /* { opline = zend_compile_static_prop(result, var_ast, BP_VAR_IS, false, false); opline->opcode = ZEND_ISSET_ISEMPTY_STATIC_PROP; break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } result->op_type = opline->result_type = IS_TMP_VAR; @@ -11697,7 +11697,7 @@ static void zend_compile_const_expr_class_name(zend_ast **ast_ptr) /* {{{ */ case ZEND_FETCH_CLASS_STATIC: zend_error_noreturn(E_COMPILE_ERROR, "static::class cannot be used for compile-time class name resolution"); - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } @@ -11805,7 +11805,7 @@ static void zend_compile_const_expr_fcc(zend_ast **ast_ptr) case ZEND_AST_STATIC_CALL: args_ast = &(*ast_ptr)->child[2]; break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } if ((*args_ast)->kind != ZEND_AST_CALLABLE_CONVERT) { zend_error_noreturn(E_COMPILE_ERROR, "Constant expression contains invalid operations"); @@ -11843,7 +11843,7 @@ static void zend_compile_const_expr_fcc(zend_ast **ast_ptr) } break; } - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } } diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index abe2a53fe7448..77beacabbb92c 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -430,7 +430,7 @@ static zend_always_inline uint32_t zend_visibility_to_set_visibility(uint32_t vi return ZEND_ACC_PROTECTED_SET; case ZEND_ACC_PRIVATE: return ZEND_ACC_PRIVATE_SET; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } } diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 37278c5cb9a23..adfc2727d1dd9 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -1789,10 +1789,10 @@ ZEND_API ZEND_COLD void zend_wrong_string_offset_error(void) case ZEND_FETCH_DIM_INCDEC: msg = "Cannot increment/decrement string offsets"; break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } ZEND_ASSERT(msg != NULL); zend_throw_error(NULL, "%s", msg); @@ -3500,7 +3500,7 @@ static zend_never_inline bool zend_handle_fetch_obj_flags( ZEND_REF_ADD_TYPE_SOURCE(Z_REF_P(ptr), prop_info); } break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } return 1; } @@ -4220,7 +4220,7 @@ static zend_never_inline void zend_fetch_this_var(int type OPLINE_DC EXECUTE_DAT ZVAL_UNDEF(result); zend_throw_error(NULL, "Cannot unset $this"); break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } @@ -5357,7 +5357,7 @@ static zend_never_inline zend_op_array* ZEND_FASTCALL zend_include_or_eval(zval efree(eval_desc); } break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } zend_tmp_string_release(tmp_inc_filename); diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index 30ed4f5914cf1..35d9994d1cb3f 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -1764,7 +1764,7 @@ zend_class_entry *zend_fetch_class_with_scope( case 0: break; /* Other fetch types are not supported by this function. */ - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } ce = zend_lookup_class_ex(class_name, NULL, fetch_type); diff --git a/Zend/zend_inheritance.c b/Zend/zend_inheritance.c index bfa709ba60b6f..149826c1e7a0d 100644 --- a/Zend/zend_inheritance.c +++ b/Zend/zend_inheritance.c @@ -537,7 +537,7 @@ static inheritance_status zend_is_class_subtype_of_type( return INHERITANCE_SUCCESS; } continue; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } } diff --git a/Zend/zend_ini_parser.y b/Zend/zend_ini_parser.y index 748ccd2235a6d..c936e7ba96f46 100644 --- a/Zend/zend_ini_parser.y +++ b/Zend/zend_ini_parser.y @@ -57,7 +57,7 @@ static int get_int_val(zval *op) { zend_string_free(Z_STR_P(op)); return val; } - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c index 58624ea5e1ceb..c0ca71d3ff05c 100644 --- a/Zend/zend_operators.c +++ b/Zend/zend_operators.c @@ -359,7 +359,7 @@ static zend_never_inline zend_result ZEND_FASTCALL _zendi_try_convert_scalar_to_ case IS_RESOURCE: case IS_ARRAY: return FAILURE; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } /* }}} */ @@ -461,7 +461,7 @@ static zend_never_inline zend_long ZEND_FASTCALL zendi_try_get_long(const zval * goto try_again; } break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } /* }}} */ @@ -606,7 +606,7 @@ ZEND_API void ZEND_FASTCALL convert_to_long(zval *op) /* {{{ */ case IS_REFERENCE: zend_unwrap_reference(op); goto try_again; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } /* }}} */ @@ -665,7 +665,7 @@ ZEND_API void ZEND_FASTCALL convert_to_double(zval *op) /* {{{ */ case IS_REFERENCE: zend_unwrap_reference(op); goto try_again; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } /* }}} */ @@ -747,7 +747,7 @@ ZEND_API void ZEND_FASTCALL convert_to_boolean(zval *op) /* {{{ */ case IS_REFERENCE: zend_unwrap_reference(op); goto try_again; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } /* }}} */ @@ -805,7 +805,7 @@ ZEND_API void ZEND_FASTCALL _convert_to_string(zval *op) /* {{{ */ case IS_REFERENCE: zend_unwrap_reference(op); goto try_again; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } /* }}} */ @@ -1014,7 +1014,7 @@ ZEND_API zend_long ZEND_FASTCALL zval_get_long_func(const zval *op, bool is_stri case IS_REFERENCE: op = Z_REFVAL_P(op); goto try_again; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } return 0; } @@ -1053,7 +1053,7 @@ ZEND_API double ZEND_FASTCALL zval_get_double_func(const zval *op) /* {{{ */ case IS_REFERENCE: op = Z_REFVAL_P(op); goto try_again; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } return 0.0; } @@ -1094,7 +1094,7 @@ static zend_always_inline zend_string* __zval_get_string_func(const zval *op, bo goto try_again; case IS_STRING: return zend_string_copy(Z_STR_P(op)); - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } return NULL; } @@ -2784,7 +2784,7 @@ ZEND_API zend_result ZEND_FASTCALL increment_function(zval *op1) /* {{{ */ case IS_ARRAY: zend_type_error("Cannot increment %s", zend_zval_value_name(op1)); return FAILURE; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } return SUCCESS; } @@ -2891,7 +2891,7 @@ ZEND_API zend_result ZEND_FASTCALL decrement_function(zval *op1) /* {{{ */ case IS_ARRAY: zend_type_error("Cannot decrement %s", zend_zval_value_name(op1)); return FAILURE; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } return SUCCESS; diff --git a/Zend/zend_portability.h b/Zend/zend_portability.h index b218886c2da5c..33a3e79a212ee 100644 --- a/Zend/zend_portability.h +++ b/Zend/zend_portability.h @@ -137,10 +137,6 @@ # define ZEND_FALLTHROUGH ((void)0) #endif -/* Only use this macro if you know for sure that all of the switches values - are covered by its case statements */ -#define EMPTY_SWITCH_DEFAULT_CASE() default: ZEND_UNREACHABLE(); break; - #if defined(__GNUC__) && __GNUC__ >= 4 # define ZEND_IGNORE_VALUE(x) (({ __typeof__ (x) __x = (x); (void) __x; })) #else diff --git a/Zend/zend_smart_str.c b/Zend/zend_smart_str.c index c779ee5c97cab..0124ed7885d60 100644 --- a/Zend/zend_smart_str.c +++ b/Zend/zend_smart_str.c @@ -229,7 +229,7 @@ ZEND_API void ZEND_FASTCALL smart_str_append_scalar(smart_str *dest, const zval smart_str_appendc(dest, '\''); break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } } diff --git a/Zend/zend_string.h b/Zend/zend_string.h index 97386ea6bad64..69c2edd13b3d0 100644 --- a/Zend/zend_string.h +++ b/Zend/zend_string.h @@ -537,7 +537,7 @@ static zend_always_inline zend_ulong zend_inline_hash_func(const char *str, size case 2: hash = ((hash << 5) + hash) + *str++; /* fallthrough... */ case 1: hash = ((hash << 5) + hash) + *str++; break; case 0: break; -EMPTY_SWITCH_DEFAULT_CASE() +default: ZEND_UNREACHABLE(); } #endif diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 86708f8c97a29..9cffc64a0ff53 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -9012,7 +9012,7 @@ ZEND_VM_HANDLER(157, ZEND_FETCH_CLASS_NAME, CV|TMP|UNUSED|CLASS_FETCH, ANY) } ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name); break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } ZEND_VM_NEXT_OPCODE(); } diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 7dfedca98d3b9..10fe98595d270 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -18232,7 +18232,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_CLASS_N } ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name); break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } ZEND_VM_NEXT_OPCODE(); } @@ -32825,7 +32825,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_CLASS_N } ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name); break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } ZEND_VM_NEXT_OPCODE(); } @@ -40825,7 +40825,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_FUNC_CCONV ZEND_FETCH_CLASS_N } ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name); break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } ZEND_VM_NEXT_OPCODE(); } @@ -70738,7 +70738,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_CLASS_NAME_S } ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name); break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } ZEND_VM_NEXT_OPCODE(); } @@ -85231,7 +85231,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_CLASS_NAME_S } ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name); break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } ZEND_VM_NEXT_OPCODE(); } @@ -93231,7 +93231,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_OPCODE_HANDLER_CCONV ZEND_FETCH_CLASS_NAME_S } ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name); break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } ZEND_VM_NEXT_OPCODE(); } diff --git a/ext/bcmath/bcmath.c b/ext/bcmath/bcmath.c index 63d9cd2a994e9..d3a077251e80d 100644 --- a/ext/bcmath/bcmath.c +++ b/ext/bcmath/bcmath.c @@ -195,7 +195,7 @@ static void bc_pow_err(bc_raise_status status, uint32_t arg_num) zend_argument_value_error(arg_num, "exponent is too large, the number of digits overflowed"); } break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } } @@ -573,7 +573,7 @@ PHP_FUNCTION(bcpowmod) case OK: RETVAL_NEW_STR(bc_num2str_ex(result, scale)); break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } cleanup: { @@ -1306,7 +1306,7 @@ static zend_result bcmath_number_do_operation(uint8_t opcode, zval *ret_val, zva goto fail; } break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } if (Z_TYPE_P(op1) != IS_OBJECT) { @@ -1492,7 +1492,7 @@ static void bcmath_number_calc_method(INTERNAL_FUNCTION_PARAMETERS, uint8_t opco goto fail; } break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } if (num_obj == NULL) { @@ -1652,7 +1652,7 @@ PHP_METHOD(BcMath_Number, powmod) goto cleanup; case OK: break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } bc_rm_trailing_zeros(ret); diff --git a/ext/bcmath/libbcmath/src/round.c b/ext/bcmath/libbcmath/src/round.c index ec0042a9f4826..707489990f9b0 100644 --- a/ext/bcmath/libbcmath/src/round.c +++ b/ext/bcmath/libbcmath/src/round.c @@ -194,7 +194,7 @@ size_t bc_round(bc_num num, zend_long precision, zend_enum_RoundingMode mode, bc } break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } up: diff --git a/ext/bz2/bz2.c b/ext/bz2/bz2.c index 2299e82720865..c5a97bac3300d 100644 --- a/ext/bz2/bz2.c +++ b/ext/bz2/bz2.c @@ -402,7 +402,7 @@ PHP_FUNCTION(bzopen) RETURN_FALSE; } break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } if (FAILURE == php_stream_cast(stream, PHP_STREAM_AS_FD, (void *) &fd, REPORT_ERRORS)) { diff --git a/ext/date/php_date.c b/ext/date/php_date.c index e5b094acdb3cd..7e85c71b94c55 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2049,7 +2049,7 @@ static int date_object_compare_timezone(zval *tz1, zval *tz2) /* {{{ */ return strcmp(o1->tzi.z.abbr, o2->tzi.z.abbr) ? 1 : 0; case TIMELIB_ZONETYPE_ID: return strcmp(o1->tzi.tz->name, o2->tzi.tz->name) ? 1 : 0; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } } /* }}} */ @@ -2744,7 +2744,7 @@ PHP_METHOD(DateTime, createFromTimestamp) } break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } RETURN_OBJ(Z_OBJ(new_object)); @@ -2825,7 +2825,7 @@ PHP_METHOD(DateTimeImmutable, createFromTimestamp) } break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } RETURN_OBJ(Z_OBJ(new_object)); @@ -5969,7 +5969,7 @@ static int date_period_has_property(zend_object *object, zend_string *name, int return 0; case ZEND_PROPERTY_EXISTS: return 1; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } diff --git a/ext/dom/element.c b/ext/dom/element.c index 4d0099b2c6410..87f70c6f9a413 100644 --- a/ext/dom/element.c +++ b/ext/dom/element.c @@ -466,7 +466,7 @@ PHP_METHOD(DOMElement, setAttribute) break; case XML_NAMESPACE_DECL: RETURN_FALSE; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } } @@ -593,7 +593,7 @@ static bool dom_remove_attribute(xmlNodePtr thisp, xmlNodePtr attrp) break; } - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } return true; } @@ -1819,7 +1819,7 @@ PHP_METHOD(Dom_Element, insertAdjacentHTML) /* Set context to this. */ context = thisp; break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } /* 4. If context is not an Element or all of the following are true: (...) */ @@ -1858,7 +1858,7 @@ PHP_METHOD(Dom_Element, insertAdjacentHTML) case ZEND_ENUM_Dom_AdjacentPosition_BeforeEnd: php_dom_node_append(this_intern->document, fragment, thisp); break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } err: diff --git a/ext/dom/html5_parser.c b/ext/dom/html5_parser.c index c00fa81b9c9e4..1ea7a27246b2d 100644 --- a/ext/dom/html5_parser.c +++ b/ext/dom/html5_parser.c @@ -462,7 +462,7 @@ static php_libxml_quirks_mode dom_translate_quirks_mode(lxb_dom_document_cmode_t case LXB_DOM_DOCUMENT_CMODE_NO_QUIRKS: return PHP_LIBXML_NO_QUIRKS; case LXB_DOM_DOCUMENT_CMODE_LIMITED_QUIRKS: return PHP_LIBXML_LIMITED_QUIRKS; case LXB_DOM_DOCUMENT_CMODE_QUIRKS: return PHP_LIBXML_QUIRKS; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } } diff --git a/ext/dom/inner_outer_html_mixin.c b/ext/dom/inner_outer_html_mixin.c index 85124d41689af..9c616441fe178 100644 --- a/ext/dom/inner_outer_html_mixin.c +++ b/ext/dom/inner_outer_html_mixin.c @@ -181,7 +181,7 @@ static lxb_dom_document_cmode_t dom_translate_quirks_mode(php_libxml_quirks_mode case PHP_LIBXML_NO_QUIRKS: return LXB_DOM_DOCUMENT_CMODE_NO_QUIRKS; case PHP_LIBXML_LIMITED_QUIRKS: return LXB_DOM_DOCUMENT_CMODE_LIMITED_QUIRKS; case PHP_LIBXML_QUIRKS: return LXB_DOM_DOCUMENT_CMODE_QUIRKS; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } } diff --git a/ext/dom/lexbor/selectors-adapted/selectors.c b/ext/dom/lexbor/selectors-adapted/selectors.c index 0bb285b39e99b..c02d61aa51a22 100644 --- a/ext/dom/lexbor/selectors-adapted/selectors.c +++ b/ext/dom/lexbor/selectors-adapted/selectors.c @@ -1453,7 +1453,7 @@ lxb_selectors_match(lxb_selectors_t *selectors, lxb_selectors_entry_t *entry, case LXB_CSS_SELECTOR_TYPE_PSEUDO_ELEMENT_FUNCTION: return false; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } return false; @@ -1635,7 +1635,7 @@ lxb_selectors_match_attribute_value(const lxb_css_selector_attribute_t *attr, bo return lexbor_str_data_ncmp_contain(trg->data, trg->length, src->data, src->length); - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } return false; diff --git a/ext/dom/node.c b/ext/dom/node.c index 7ff5c6615a6ca..1a01f4448ff96 100644 --- a/ext/dom/node.c +++ b/ext/dom/node.c @@ -138,7 +138,7 @@ zend_result dom_node_node_name_read(dom_object *obj, zval *retval) case XML_TEXT_NODE: ZVAL_STRING(retval, "#text"); break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } return SUCCESS; diff --git a/ext/gd/gd.c b/ext/gd/gd.c index 1bd1a26f05199..2624d13b51da9 100644 --- a/ext/gd/gd.c +++ b/ext/gd/gd.c @@ -1746,7 +1746,7 @@ static void _php_image_output(INTERNAL_FUNCTION_PARAMETERS, int image_type) RETURN_THROWS(); } break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } /* quality must fit in an int */ @@ -1776,7 +1776,7 @@ static void _php_image_output(INTERNAL_FUNCTION_PARAMETERS, int image_type) } gdImageGd2(im, fp, quality, type); break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } fflush(fp); fclose(fp); @@ -1802,7 +1802,7 @@ static void _php_image_output(INTERNAL_FUNCTION_PARAMETERS, int image_type) } gdImageGd2(im, tmp, quality, type); break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } fseek(tmp, 0, SEEK_SET); diff --git a/ext/gmp/gmp.c b/ext/gmp/gmp.c index b5451b8035e37..318380808e01b 100644 --- a/ext/gmp/gmp.c +++ b/ext/gmp/gmp.c @@ -393,7 +393,7 @@ typeof_op_failure: ; case ZEND_SR: op_sigil = ">>"; break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } zend_type_error("Unsupported operand types: %s %s %s", zend_zval_type_name(op1), op_sigil, zend_zval_type_name(op2)); return FAILURE; @@ -929,7 +929,7 @@ ZEND_FUNCTION(gmp_div_qr) case GMP_ROUND_MINUSINF: mpz_fdiv_qr(gmpnum_result1, gmpnum_result2, gmpnum_a, gmpnum_b); break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } diff --git a/ext/intl/formatter/formatter_format.cpp b/ext/intl/formatter/formatter_format.cpp index f28ea30b9ff8f..25d21cb20f1f6 100644 --- a/ext/intl/formatter/formatter_format.cpp +++ b/ext/intl/formatter/formatter_format.cpp @@ -55,7 +55,7 @@ U_CFUNC PHP_FUNCTION( numfmt_format ) case IS_DOUBLE: type = FORMAT_TYPE_DOUBLE; break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } } diff --git a/ext/intl/resourcebundle/resourcebundle.cpp b/ext/intl/resourcebundle/resourcebundle.cpp index b8c5c00efaba6..7d4f635211849 100644 --- a/ext/intl/resourcebundle/resourcebundle.cpp +++ b/ext/intl/resourcebundle/resourcebundle.cpp @@ -74,7 +74,7 @@ U_CFUNC void resourcebundle_extract_value( zval *return_value, ResourceBundle_ob source->child = NULL; intl_errors_reset(INTL_DATA_ERROR_P(source)); break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } } /* }}} */ diff --git a/ext/ldap/ldap.c b/ext/ldap/ldap.c index a13b25e1efdec..fe8d7a5c5c674 100644 --- a/ext/ldap/ldap.c +++ b/ext/ldap/ldap.c @@ -2783,7 +2783,7 @@ PHP_FUNCTION(ldap_modify_batch) case LDAP_MODIFY_BATCH_REPLACE: ldap_operation = LDAP_MOD_REPLACE; break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } /* fill in the basic info */ diff --git a/ext/mbstring/libmbfl/filters/mbfilter_cjk.c b/ext/mbstring/libmbfl/filters/mbfilter_cjk.c index 6a9c3803c4703..83bc34ae1b77b 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_cjk.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_cjk.c @@ -279,7 +279,7 @@ static int mbfl_filt_conv_jis_wchar(int c, mbfl_convert_filter *filter) } break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } return 0; @@ -1836,7 +1836,7 @@ static int mbfl_filt_conv_jis2004_wchar(int c, mbfl_convert_filter *filter) } break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } return 0; @@ -2528,7 +2528,7 @@ static int mbfl_filt_conv_cp5022x_wchar(int c, mbfl_convert_filter *filter) } break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } return 0; @@ -4115,7 +4115,7 @@ static int mbfl_filt_conv_2022kr_wchar(int c, mbfl_convert_filter *filter) } break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } return 0; @@ -9223,7 +9223,7 @@ static int mbfl_filt_conv_hz_wchar(int c, mbfl_convert_filter *filter) } break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } return 0; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf7.c b/ext/mbstring/libmbfl/filters/mbfilter_utf7.c index 87bdc590e6d59..0ee74c032140a 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_utf7.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf7.c @@ -260,7 +260,7 @@ int mbfl_filt_conv_utf7_wchar(int c, mbfl_convert_filter *filter) } break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } return 0; @@ -368,7 +368,7 @@ int mbfl_filt_conv_wchar_utf7(int c, mbfl_convert_filter *filter) } break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } return 0; diff --git a/ext/mbstring/libmbfl/filters/mbfilter_utf7imap.c b/ext/mbstring/libmbfl/filters/mbfilter_utf7imap.c index ac49e6a165b42..ba34255ebc130 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_utf7imap.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_utf7imap.c @@ -282,7 +282,7 @@ int mbfl_filt_conv_utf7imap_wchar(int c, mbfl_convert_filter *filter) } break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } return 0; @@ -409,7 +409,7 @@ int mbfl_filt_conv_wchar_utf7imap(int c, mbfl_convert_filter *filter) } break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } return 0; diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c index c5987f3c9e7a4..50355f784fb9b 100644 --- a/ext/mbstring/mbstring.c +++ b/ext/mbstring/mbstring.c @@ -5260,7 +5260,7 @@ static bool mb_fast_check_utf8_default(zend_string *str) } break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } } diff --git a/ext/mbstring/php_unicode.c b/ext/mbstring/php_unicode.c index f4944312bdf5f..205c70b9cfb5b 100644 --- a/ext/mbstring/php_unicode.c +++ b/ext/mbstring/php_unicode.c @@ -463,7 +463,7 @@ MBSTRING_API zend_string *php_unicode_convert_case(php_case_mode case_mode, cons } break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } converted_end = p; diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c index a077972f51678..bcb8880e57853 100644 --- a/ext/mysqli/mysqli.c +++ b/ext/mysqli/mysqli.c @@ -325,7 +325,7 @@ static int mysqli_object_has_property(zend_object *object, zend_string *name, in } break; } - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } } else { has_property = zend_std_has_property(object, name, has_set_exists, cache_slot); diff --git a/ext/opcache/jit/zend_jit.c b/ext/opcache/jit/zend_jit.c index c80d2be3c3db9..244e1ad599874 100644 --- a/ext/opcache/jit/zend_jit.c +++ b/ext/opcache/jit/zend_jit.c @@ -1411,7 +1411,7 @@ static bool zend_jit_supported_binary_op(uint8_t op, uint32_t op1_info, uint32_t return (op1_info & MAY_BE_LONG) && (op2_info & MAY_BE_LONG); case ZEND_CONCAT: return (op1_info & MAY_BE_STRING) && (op2_info & MAY_BE_STRING); - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } diff --git a/ext/opcache/jit/zend_jit_helpers.c b/ext/opcache/jit/zend_jit_helpers.c index 59bb9401d9a98..70e691313b874 100644 --- a/ext/opcache/jit/zend_jit_helpers.c +++ b/ext/opcache/jit/zend_jit_helpers.c @@ -2285,7 +2285,7 @@ static zend_never_inline bool zend_handle_fetch_obj_flags( } } break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } return 1; } diff --git a/ext/opcache/jit/zend_jit_ir.c b/ext/opcache/jit/zend_jit_ir.c index a0e0ed46128c7..20fb79cf2da72 100644 --- a/ext/opcache/jit/zend_jit_ir.c +++ b/ext/opcache/jit/zend_jit_ir.c @@ -16082,7 +16082,7 @@ static int zend_jit_fetch_static_prop(zend_jit_ctx *jit, const zend_op *opline, case ZEND_FETCH_STATIC_PROP_UNSET: fetch_type = BP_VAR_UNSET; break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } // JIT: result = CACHED_PTR(cache_slot + sizeof(void *)); diff --git a/ext/openssl/openssl_backend_common.c b/ext/openssl/openssl_backend_common.c index 5762d0613777a..4ed92ca021bdd 100644 --- a/ext/openssl/openssl_backend_common.c +++ b/ext/openssl/openssl_backend_common.c @@ -1520,7 +1520,7 @@ EVP_PKEY *php_openssl_generate_private_key(struct php_x509_request * req) case EVP_PKEY_ED448: break; #endif - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } if (EVP_PKEY_paramgen(ctx, ¶ms) <= 0) { diff --git a/ext/pcre/php_pcre.c b/ext/pcre/php_pcre.c index 32ab6b0e5090b..a251b7b09a9bd 100644 --- a/ext/pcre/php_pcre.c +++ b/ext/pcre/php_pcre.c @@ -2495,7 +2495,7 @@ PHP_FUNCTION(preg_replace_callback_array) case IS_NULL: RETVAL_NULL(); goto error; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } if (EG(exception)) { diff --git a/ext/pdo/pdo_stmt.c b/ext/pdo/pdo_stmt.c index 1e2c2d14f37d8..50f16f23ead1b 100644 --- a/ext/pdo/pdo_stmt.c +++ b/ext/pdo/pdo_stmt.c @@ -148,7 +148,7 @@ bool pdo_stmt_describe_columns(pdo_stmt_t *stmt) /* {{{ */ stmt->columns[col].name = zend_string_toupper(orig_name); zend_string_release(orig_name); break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } @@ -823,7 +823,7 @@ static bool do_fetch(pdo_stmt_t *stmt, zval *return_value, enum pdo_fetch_type h * However, if we fetch a group key we will have over allocated. */ fetch_function_params = safe_emalloc(sizeof(zval), stmt->column_count, 0); break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } if (group_key) { @@ -918,7 +918,7 @@ static bool do_fetch(pdo_stmt_t *stmt, zval *return_value, enum pdo_fetch_type h case PDO_FETCH_FUNC: ZVAL_COPY_VALUE(&fetch_function_params[fetch_function_param_num++], &val); break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } } diff --git a/ext/pdo_firebird/firebird_statement.c b/ext/pdo_firebird/firebird_statement.c index d506aa69eed31..8e917e2926a07 100644 --- a/ext/pdo_firebird/firebird_statement.c +++ b/ext/pdo_firebird/firebird_statement.c @@ -492,7 +492,7 @@ static int pdo_firebird_stmt_get_col( break; case SQL_DOUBLE: break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } if ((var->sqltype & ~1) == SQL_DOUBLE) { diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c index 2ddbf0af23095..c839eda553bca 100644 --- a/ext/pgsql/pgsql.c +++ b/ext/pgsql/pgsql.c @@ -1013,7 +1013,7 @@ static void php_pgsql_get_link_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type break; } #endif - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } if (result) { RETURN_STRING(result); @@ -1578,7 +1578,7 @@ static void php_pgsql_get_result_info(INTERNAL_FUNCTION_PARAMETERS, int entry_ty case PHP_PG_CMD_TUPLES: RETVAL_LONG(atoi(PQcmdTuples(pgsql_result))); break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } @@ -1817,7 +1817,7 @@ static void php_pgsql_get_field_info(INTERNAL_FUNCTION_PARAMETERS, int entry_typ oid = PQftype(pgsql_result, (int)field); PGSQL_RETURN_OID(oid); - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } /* }}} */ @@ -2348,7 +2348,7 @@ static void php_pgsql_data_info(INTERNAL_FUNCTION_PARAMETERS, int entry_type, bo case PHP_PG_DATA_ISNULL: RETVAL_LONG(PQgetisnull(pgsql_result, pgsql_row, field_offset)); break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } /* }}} */ @@ -3921,7 +3921,7 @@ static void php_pgsql_do_async(INTERNAL_FUNCTION_PARAMETERS, int entry_type) PQfreeCancel(c); break; } - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } if (PQsetnonblocking(pgsql, 0)) { php_error_docref(NULL, E_NOTICE, "Cannot set connection to blocking mode"); diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index 9665d14532846..4a10a950b9105 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -1516,7 +1516,7 @@ static void reflection_type_factory(zend_type type, zval *object, bool legacy_be case NAMED_TYPE: object_init_ex(object, reflection_named_type_ptr); break; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } intern = Z_REFLECTION_P(object); @@ -6669,7 +6669,7 @@ static zend_always_inline uint32_t set_visibility_to_visibility(uint32_t set_vis return ZEND_ACC_PROTECTED; case ZEND_ACC_PRIVATE_SET: return ZEND_ACC_PRIVATE; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } } diff --git a/ext/standard/array.c b/ext/standard/array.c index 7aafe6ea0a176..037f13a7a4647 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -2818,7 +2818,7 @@ static uint8_t php_range_process_input(const zval *input, uint32_t arg_num, zend *dval = 0.0; return IS_STRING; } - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } } diff --git a/ext/standard/http.c b/ext/standard/http.c index 9ce8d5e559a7d..9954a34b69ead 100644 --- a/ext/standard/http.c +++ b/ext/standard/http.c @@ -79,7 +79,7 @@ static void php_url_encode_scalar(zval *scalar, smart_str *form_str, scalar = zend_enum_fetch_case_value(Z_OBJ_P(scalar)); goto try_again; /* All possible types are either handled here or previously */ - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } } diff --git a/ext/standard/math.c b/ext/standard/math.c index a1d151209a704..61534975c2f8c 100644 --- a/ext/standard/math.c +++ b/ext/standard/math.c @@ -152,7 +152,7 @@ static inline double php_round_helper(double integral, double value, double expo return integral; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } // FIXME: GCC bug, branch is considered reachable. ZEND_UNREACHABLE(); @@ -261,7 +261,7 @@ PHP_FUNCTION(abs) } case IS_DOUBLE: RETURN_DOUBLE(fabs(Z_DVAL_P(value))); - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } } /* }}} */ @@ -280,7 +280,7 @@ PHP_FUNCTION(ceil) RETURN_DOUBLE(zval_get_double(value)); case IS_DOUBLE: RETURN_DOUBLE(ceil(Z_DVAL_P(value))); - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } } /* }}} */ @@ -299,7 +299,7 @@ PHP_FUNCTION(floor) RETURN_DOUBLE(zval_get_double(value)); case IS_DOUBLE: RETURN_DOUBLE(floor(Z_DVAL_P(value))); - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } } /* }}} */ @@ -382,7 +382,7 @@ PHP_FUNCTION(round) case IS_DOUBLE: RETURN_DOUBLE(_php_math_round(zval_get_double(value), (int)places, (int)mode)); - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } } /* }}} */ @@ -1437,7 +1437,7 @@ PHP_FUNCTION(number_format) } RETURN_STR(_php_math_number_format_ex(Z_DVAL_P(num), dec_int, dec_point, dec_point_len, thousand_sep, thousand_sep_len)); - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } /* }}} */ diff --git a/ext/standard/proc_open.c b/ext/standard/proc_open.c index a393a2a1f8848..ddce144161ca2 100644 --- a/ext/standard/proc_open.c +++ b/ext/standard/proc_open.c @@ -1024,7 +1024,7 @@ static zend_result redirect_proc_descriptor(descriptorspec_item *desc, int targe case 0: redirect_to = GetStdHandle(STD_INPUT_HANDLE); break; case 1: redirect_to = GetStdHandle(STD_OUTPUT_HANDLE); break; case 2: redirect_to = GetStdHandle(STD_ERROR_HANDLE); break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } #endif } diff --git a/ext/tidy/tidy.c b/ext/tidy/tidy.c index 6b5d1061d5124..496fb260976e0 100644 --- a/ext/tidy/tidy.c +++ b/ext/tidy/tidy.c @@ -705,7 +705,7 @@ static void php_tidy_create_node(INTERNAL_FUNCTION_PARAMETERS, tidy_base_nodetyp node = tidyGetBody(obj->ptdoc->doc); break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } if (!node) { diff --git a/ext/uri/php_uri_common.c b/ext/uri/php_uri_common.c index da73bc59bf9cf..5c48be475fb9f 100644 --- a/ext/uri/php_uri_common.c +++ b/ext/uri/php_uri_common.c @@ -38,7 +38,7 @@ static zend_string *get_known_string_by_property_name(php_uri_property_name prop return ZSTR_KNOWN(ZEND_STR_QUERY); case PHP_URI_PROPERTY_NAME_FRAGMENT: return ZSTR_KNOWN(ZEND_STR_FRAGMENT); - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } diff --git a/ext/uri/php_uri_common.h b/ext/uri/php_uri_common.h index 2ae76cb2ee4dc..6fced64e372f7 100644 --- a/ext/uri/php_uri_common.h +++ b/ext/uri/php_uri_common.h @@ -182,7 +182,7 @@ static inline const php_uri_property_handler *php_uri_parser_property_handler_by return &parser->property_handler.query; case PHP_URI_PROPERTY_NAME_FRAGMENT: return &parser->property_handler.fragment; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } diff --git a/ext/uri/uri_parser_php_parse_url.c b/ext/uri/uri_parser_php_parse_url.c index 8cee29e8f0c6c..b5f7ed2f81acd 100644 --- a/ext/uri/uri_parser_php_parse_url.c +++ b/ext/uri/uri_parser_php_parse_url.c @@ -34,7 +34,7 @@ static zend_string *decode_component(zend_string *in, php_uri_component_read_mod return out; } - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } } diff --git a/ext/uri/uri_parser_rfc3986.c b/ext/uri/uri_parser_rfc3986.c index 5f1edbefe2bbc..419f3db5652b5 100644 --- a/ext/uri/uri_parser_rfc3986.c +++ b/ext/uri/uri_parser_rfc3986.c @@ -103,7 +103,7 @@ ZEND_ATTRIBUTE_NONNULL static UriUriA *get_uri_for_reading(php_uri_parser_rfc398 ZEND_FALLTHROUGH; case PHP_URI_COMPONENT_READ_MODE_NORMALIZED_UNICODE: return get_normalized_uri(uriparser_uris); - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } diff --git a/ext/uri/uri_parser_whatwg.c b/ext/uri/uri_parser_whatwg.c index 9d5e87fd4cf46..2b47d31d79e17 100644 --- a/ext/uri/uri_parser_whatwg.c +++ b/ext/uri/uri_parser_whatwg.c @@ -196,7 +196,7 @@ static const char *fill_errors(zval *errors) error_str = "FileInvalidWindowsDriveLetterHost"; ZVAL_FALSE(&failure); break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } zval error_type; @@ -374,7 +374,7 @@ static zend_result php_uri_parser_whatwg_host_read(void *uri, php_uri_component_ case PHP_URI_COMPONENT_READ_MODE_RAW: ZVAL_STRINGL(retval, (const char *) lexbor_uri->host.u.domain.data, lexbor_uri->host.u.domain.length); break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } else { ZVAL_NULL(retval); @@ -615,7 +615,7 @@ static zend_string *php_uri_parser_whatwg_to_string(void *uri, php_uri_recomposi case PHP_URI_RECOMPOSITION_MODE_NORMALIZED_ASCII: lxb_url_serialize(lexbor_uri, serialize_to_smart_str_callback, &uri_str, exclude_fragment); break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } return smart_str_extract(&uri_str); diff --git a/ext/xmlreader/php_xmlreader.c b/ext/xmlreader/php_xmlreader.c index 8e35ad9d6b0d5..27de3a2902850 100644 --- a/ext/xmlreader/php_xmlreader.c +++ b/ext/xmlreader/php_xmlreader.c @@ -102,7 +102,7 @@ static int xmlreader_property_reader(xmlreader_object *obj, xmlreader_prop_handl case IS_LONG: ZVAL_LONG(rv, retint); break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } return SUCCESS; diff --git a/ext/zend_test/test.c b/ext/zend_test/test.c index 0faf65f36437f..7ab2272dd1684 100644 --- a/ext/zend_test/test.c +++ b/ext/zend_test/test.c @@ -347,7 +347,7 @@ static ZEND_FUNCTION(zend_number_or_string) RETURN_DOUBLE(Z_DVAL_P(input)); case IS_STRING: RETURN_STR_COPY(Z_STR_P(input)); - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } } @@ -371,7 +371,7 @@ static ZEND_FUNCTION(zend_number_or_string_or_null) RETURN_DOUBLE(Z_DVAL_P(input)); case IS_STRING: RETURN_STR_COPY(Z_STR_P(input)); - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } } diff --git a/ext/zlib/zlib.c b/ext/zlib/zlib.c index ef792b374b11d..c6a56e172be45 100644 --- a/ext/zlib/zlib.c +++ b/ext/zlib/zlib.c @@ -925,7 +925,7 @@ PHP_FUNCTION(inflate_init) efree(ctx->inflateDict); ctx->inflateDict = NULL; break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } } } @@ -1022,7 +1022,7 @@ PHP_FUNCTION(inflate_add) zend_string_release_ex(out, 0); php_error_docref(NULL, E_WARNING, "Dictionary does not match expected dictionary (incorrect adler32 hash)"); RETURN_FALSE; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } break; } else { diff --git a/sapi/cli/php_cli_server.c b/sapi/cli/php_cli_server.c index 65d6d5a898de3..3e943f0f5eaa9 100644 --- a/sapi/cli/php_cli_server.c +++ b/sapi/cli/php_cli_server.c @@ -2648,7 +2648,7 @@ static zend_result php_cli_server_recv_event_read_request(php_cli_server *server case 0: php_cli_server_poller_add(&server->poller, POLLIN, client->sock); return SUCCESS; - EMPTY_SWITCH_DEFAULT_CASE(); + default: ZEND_UNREACHABLE(); } /* Under ASAN the compiler somehow doesn't realise that the switch block always returns */ return FAILURE; diff --git a/sapi/phpdbg/phpdbg_out.c b/sapi/phpdbg/phpdbg_out.c index 63b61fb8eab04..34f640ab6e535 100644 --- a/sapi/phpdbg/phpdbg_out.c +++ b/sapi/phpdbg/phpdbg_out.c @@ -109,7 +109,7 @@ int phpdbg_process_print(int fd, int type, const char *msg, int msglen) { } } break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } if (msgoutlen != FAILURE) { diff --git a/sapi/phpdbg/phpdbg_win.c b/sapi/phpdbg/phpdbg_win.c index dc1c1dba216af..033991f0d901b 100644 --- a/sapi/phpdbg/phpdbg_win.c +++ b/sapi/phpdbg/phpdbg_win.c @@ -35,7 +35,7 @@ int phpdbg_exception_handler_win32(EXCEPTION_POINTERS *xp) { return EXCEPTION_CONTINUE_EXECUTION; } break; - EMPTY_SWITCH_DEFAULT_CASE() + default: ZEND_UNREACHABLE(); } return EXCEPTION_CONTINUE_SEARCH; From 308050769c7c77a1bbeb16db688d213c65c89568 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20D=C3=BCsterhus?= Date: Mon, 6 Apr 2026 14:49:48 +0200 Subject: [PATCH 2/6] Drop `EMPTY_SWITCH_DEFAULT_CASE()` exclusion from `build/Makefile.gcov` --- build/Makefile.gcov | 1 - 1 file changed, 1 deletion(-) diff --git a/build/Makefile.gcov b/build/Makefile.gcov index a1ae17a373eab..d24ada44b7a42 100644 --- a/build/Makefile.gcov +++ b/build/Makefile.gcov @@ -30,7 +30,6 @@ GCOVR_EXCLUDES = \ GCOVR_EXCLUDE_LINES_BY_PATTERNS = \ '.*\b(ZEND_PARSE_PARAMETERS_(START|END|NONE)|Z_PARAM_).*' \ - '\s*EMPTY_SWITCH_DEFAULT_CASE\(\)(;)?\s*' \ '\s*ZEND_UNREACHABLE\(\);\s*' lcov: lcov-html From 7d5847d4d3fe537c34d3142f6608548111c1f2aa Mon Sep 17 00:00:00 2001 From: Weilin Du <108666168+LamentXU123@users.noreply.github.com> Date: Mon, 6 Apr 2026 20:52:20 +0800 Subject: [PATCH 3/6] ext/zip: Preinitialize arrays when size is known (#21572) --- ext/zip/php_zip.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/zip/php_zip.c b/ext/zip/php_zip.c index 805527b7d848b..4749f91cc2742 100644 --- a/ext/zip/php_zip.c +++ b/ext/zip/php_zip.c @@ -709,7 +709,7 @@ int php_zip_glob(zend_string *spattern, zend_long flags, zval *return_value) /* return -1; } - array_init(return_value); + array_init_size(return_value, (uint32_t)globbuf.gl_pathc); for (size_t n = 0; n < globbuf.gl_pathc; n++) { /* we need to do this every time since PHP_GLOB_ONLYDIR does not guarantee that * all directories will be filtered. GNU libc documentation states the @@ -788,7 +788,7 @@ int php_zip_pcre(zend_string *regexp, char *path, int path_len, zval *return_val return -1; } - array_init(return_value); + array_init_size(return_value, (uint32_t)files_cnt); /* only the files, directories are ignored */ for (i = 0; i < files_cnt; i++) { From 02dab7f5efcf8a68fbfa991000c61f23b451f5d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20D=C3=BCsterhus?= Date: Mon, 6 Apr 2026 15:04:58 +0200 Subject: [PATCH 4/6] Adjust `ZEND_UNREACHABLE()` exclusion in build/Makefile.gcov These patterns are implicitly anchored, thus we must manually handle the `default: ZEND_UNREACHABLE();` case. Also add a comment indicating that for future changes. --- build/Makefile.gcov | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build/Makefile.gcov b/build/Makefile.gcov index d24ada44b7a42..0ae5a44944d08 100644 --- a/build/Makefile.gcov +++ b/build/Makefile.gcov @@ -28,9 +28,10 @@ GCOVR_EXCLUDES = \ 'ext/pcre/pcre2lib/.*' \ 'ext/uri/uriparser/.*' +# These patterns have implicit ^/$ anchors. GCOVR_EXCLUDE_LINES_BY_PATTERNS = \ '.*\b(ZEND_PARSE_PARAMETERS_(START|END|NONE)|Z_PARAM_).*' \ - '\s*ZEND_UNREACHABLE\(\);\s*' + '\s*(default:\s*)?ZEND_UNREACHABLE\(\);\s*' lcov: lcov-html From f4d9ed13685928628d0ebb06a1d1d02630299085 Mon Sep 17 00:00:00 2001 From: Marc Bennewitz Date: Mon, 6 Apr 2026 15:39:41 +0200 Subject: [PATCH 5/6] Use consistent type for h on call zend_hash_index_* (#19255) --- Zend/zend_execute_API.c | 2 +- Zend/zend_generators.c | 4 ++-- Zend/zend_inheritance.c | 4 ++-- Zend/zend_vm_execute.h | 6 ++--- Zend/zend_vm_execute.skl | 6 ++--- Zend/zend_weakrefs.c | 10 ++++----- ext/intl/msgformat/msgformat_helpers.cpp | 2 +- ext/soap/php_encoding.c | 8 +++---- sapi/phpdbg/phpdbg_bp.c | 6 ++--- sapi/phpdbg/phpdbg_prompt.c | 8 +++---- sapi/phpdbg/phpdbg_watch.c | 28 ++++++++++++------------ 11 files changed, 42 insertions(+), 42 deletions(-) diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index 35d9994d1cb3f..1a79bc1ba9969 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -1206,7 +1206,7 @@ ZEND_API zend_class_entry *zend_lookup_class_ex(zend_string *name, zend_string * ALLOC_HASHTABLE(CG(unlinked_uses)); zend_hash_init(CG(unlinked_uses), 0, NULL, NULL, 0); } - zend_hash_index_add_empty_element(CG(unlinked_uses), (zend_long)(uintptr_t)ce); + zend_hash_index_add_empty_element(CG(unlinked_uses), (zend_ulong)(uintptr_t)ce); return ce; } return NULL; diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c index 3bec062e9ce14..14e981fb77fbd 100644 --- a/Zend/zend_generators.c +++ b/Zend/zend_generators.c @@ -179,7 +179,7 @@ static void zend_generator_remove_child(zend_generator_node *node, zend_generato node->child.single = NULL; } else { HashTable *ht = node->child.ht; - zend_hash_index_del(ht, (zend_ulong) child); + zend_hash_index_del(ht, (zend_ulong)(uintptr_t) child); if (node->children == 2) { zend_generator *other_child; ZEND_HASH_FOREACH_PTR(ht, other_child) { @@ -558,7 +558,7 @@ static void zend_generator_add_child(zend_generator *generator, zend_generator * node->child.ht = ht; } - zend_hash_index_add_new_ptr(node->child.ht, (zend_ulong) child, child); + zend_hash_index_add_new_ptr(node->child.ht, (zend_ulong)(uintptr_t) child, child); } ++node->children; diff --git a/Zend/zend_inheritance.c b/Zend/zend_inheritance.c index 149826c1e7a0d..69f3be91fa065 100644 --- a/Zend/zend_inheritance.c +++ b/Zend/zend_inheritance.c @@ -3308,7 +3308,7 @@ static void check_unrecoverable_load_failure(const zend_class_entry *ce) { * a dependence on the inheritance hierarchy of this specific class. Instead we fall back to * a fatal error, as would happen if we did not allow exceptions in the first place. */ if (CG(unlinked_uses) - && zend_hash_index_del(CG(unlinked_uses), (zend_long)(uintptr_t)ce) == SUCCESS) { + && zend_hash_index_del(CG(unlinked_uses), (zend_ulong)(uintptr_t)ce) == SUCCESS) { zend_exception_uncaught_error( "During inheritance of %s with variance dependencies", ZSTR_VAL(ce->name)); } @@ -3603,7 +3603,7 @@ ZEND_API zend_class_entry *zend_do_link_class(zend_class_entry *ce, zend_string } if (CG(unlinked_uses)) { - zend_hash_index_del(CG(unlinked_uses), (zend_long)(uintptr_t) ce); + zend_hash_index_del(CG(unlinked_uses), (zend_ulong)(uintptr_t) ce); } orig_linking_class = CG(current_linking_class); diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 10fe98595d270..7359bcb793f23 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -122749,7 +122749,7 @@ static void init_opcode_serialiser(void) Z_TYPE_INFO(tmp) = IS_LONG; for (i = 0; i < zend_handlers_count; i++) { Z_LVAL(tmp) = i; - zend_hash_index_add(zend_handlers_table, (zend_long)(uintptr_t)zend_opcode_handlers[i], &tmp); + zend_hash_index_add(zend_handlers_table, (zend_ulong)(uintptr_t)zend_opcode_handlers[i], &tmp); } } @@ -122760,7 +122760,7 @@ ZEND_API void ZEND_FASTCALL zend_serialize_opcode_handler(zend_op *op) if (!zend_handlers_table) { init_opcode_serialiser(); } - zv = zend_hash_index_find(zend_handlers_table, (zend_long)(uintptr_t)op->handler); + zv = zend_hash_index_find(zend_handlers_table, (zend_ulong)(uintptr_t)op->handler); ZEND_ASSERT(zv != NULL); op->handler = (zend_vm_opcode_handler_t)(uintptr_t)Z_LVAL_P(zv); } @@ -122778,7 +122778,7 @@ ZEND_API const void* ZEND_FASTCALL zend_get_opcode_handler_func(const zend_op *o if (!zend_handlers_table) { init_opcode_serialiser(); } - zv = zend_hash_index_find(zend_handlers_table, (zend_long)(uintptr_t)op->handler); + zv = zend_hash_index_find(zend_handlers_table, (zend_ulong)(uintptr_t)op->handler); ZEND_ASSERT(zv != NULL); return zend_opcode_handler_funcs[Z_LVAL_P(zv)]; #elif ZEND_VM_KIND == ZEND_VM_KIND_CALL diff --git a/Zend/zend_vm_execute.skl b/Zend/zend_vm_execute.skl index 53b1ac6baf0a3..3237a696a6959 100644 --- a/Zend/zend_vm_execute.skl +++ b/Zend/zend_vm_execute.skl @@ -113,7 +113,7 @@ static void init_opcode_serialiser(void) Z_TYPE_INFO(tmp) = IS_LONG; for (i = 0; i < zend_handlers_count; i++) { Z_LVAL(tmp) = i; - zend_hash_index_add(zend_handlers_table, (zend_long)(uintptr_t)zend_opcode_handlers[i], &tmp); + zend_hash_index_add(zend_handlers_table, (zend_ulong)(uintptr_t)zend_opcode_handlers[i], &tmp); } } @@ -124,7 +124,7 @@ ZEND_API void ZEND_FASTCALL zend_serialize_opcode_handler(zend_op *op) if (!zend_handlers_table) { init_opcode_serialiser(); } - zv = zend_hash_index_find(zend_handlers_table, (zend_long)(uintptr_t)op->handler); + zv = zend_hash_index_find(zend_handlers_table, (zend_ulong)(uintptr_t)op->handler); ZEND_ASSERT(zv != NULL); op->handler = (zend_vm_opcode_handler_t)(uintptr_t)Z_LVAL_P(zv); } @@ -142,7 +142,7 @@ ZEND_API const void* ZEND_FASTCALL zend_get_opcode_handler_func(const zend_op *o if (!zend_handlers_table) { init_opcode_serialiser(); } - zv = zend_hash_index_find(zend_handlers_table, (zend_long)(uintptr_t)op->handler); + zv = zend_hash_index_find(zend_handlers_table, (zend_ulong)(uintptr_t)op->handler); ZEND_ASSERT(zv != NULL); return zend_opcode_handler_funcs[Z_LVAL_P(zv)]; #elif ZEND_VM_KIND == ZEND_VM_KIND_CALL diff --git a/Zend/zend_weakrefs.c b/Zend/zend_weakrefs.c index 8c1263885bf6c..16b972eb0c20d 100644 --- a/Zend/zend_weakrefs.c +++ b/Zend/zend_weakrefs.c @@ -109,15 +109,15 @@ static void zend_weakref_register(zend_object *object, void *payload) { void *tagged_ptr = Z_PTR_P(zv); if (ZEND_WEAKREF_GET_TAG(tagged_ptr) == ZEND_WEAKREF_TAG_HT) { HashTable *ht = ZEND_WEAKREF_GET_PTR(tagged_ptr); - zend_hash_index_add_new_ptr(ht, (zend_ulong) payload, payload); + zend_hash_index_add_new_ptr(ht, (zend_ulong)(uintptr_t) payload, payload); return; } /* Convert simple pointer to hashtable. */ HashTable *ht = emalloc(sizeof(HashTable)); zend_hash_init(ht, 0, NULL, NULL, 0); - zend_hash_index_add_new_ptr(ht, (zend_ulong) tagged_ptr, tagged_ptr); - zend_hash_index_add_new_ptr(ht, (zend_ulong) payload, payload); + zend_hash_index_add_new_ptr(ht, (zend_ulong)(uintptr_t) tagged_ptr, tagged_ptr); + zend_hash_index_add_new_ptr(ht, (zend_ulong)(uintptr_t) payload, payload); /* Replace the single WeakMap or WeakReference entry in EG(weakrefs) with a HashTable with 2 entries in place. */ ZVAL_PTR(zv, ZEND_WEAKREF_ENCODE(ht, ZEND_WEAKREF_TAG_HT)); } @@ -146,11 +146,11 @@ static void zend_weakref_unregister(zend_object *object, void *payload, bool wea HashTable *ht = ptr; #if ZEND_DEBUG - void *old_payload = zend_hash_index_find_ptr(ht, (zend_ulong) payload); + void *old_payload = zend_hash_index_find_ptr(ht, (zend_ulong)(uintptr_t) payload); ZEND_ASSERT(old_payload && "Weakref not registered?"); ZEND_ASSERT(old_payload == payload); #endif - zend_hash_index_del(ht, (zend_ulong) payload); + zend_hash_index_del(ht, (zend_ulong)(uintptr_t) payload); if (zend_hash_num_elements(ht) == 0) { GC_DEL_FLAGS(object, IS_OBJ_WEAKLY_REFERENCED); zend_hash_destroy(ht); diff --git a/ext/intl/msgformat/msgformat_helpers.cpp b/ext/intl/msgformat/msgformat_helpers.cpp index 25e8dbf869685..c70463f95fba0 100644 --- a/ext/intl/msgformat/msgformat_helpers.cpp +++ b/ext/intl/msgformat/msgformat_helpers.cpp @@ -411,7 +411,7 @@ U_CFUNC void umsg_format_helper(MessageFormatter_object *mfo, int32_t len = u_sprintf(temp, "%u", (uint32_t)num_index); key.append(temp, len); - storedArgType = (Formattable::Type*)zend_hash_index_find_ptr(types, (zend_ulong)num_index); + storedArgType = (Formattable::Type*)zend_hash_index_find_ptr(types, num_index); } else { //string; assumed to be in UTF-8 intl_stringFromChar(key, ZSTR_VAL(str_index), ZSTR_LEN(str_index), &err.code); diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c index 5e3675f875bdd..0e9e77bef88eb 100644 --- a/ext/soap/php_encoding.c +++ b/ext/soap/php_encoding.c @@ -278,7 +278,7 @@ static bool soap_check_zval_ref(zval *data, xmlNodePtr node) { if (Z_TYPE_P(data) == IS_OBJECT) { data = (zval*)Z_OBJ_P(data); } - if ((node_ptr = zend_hash_index_find_ptr(SOAP_GLOBAL(ref_map), (zend_ulong)data)) != NULL) { + if ((node_ptr = zend_hash_index_find_ptr(SOAP_GLOBAL(ref_map), (zend_ulong)(uintptr_t)data)) != NULL) { xmlAttrPtr attr = node_ptr->properties; char *id; smart_str prefix = {0}; @@ -324,7 +324,7 @@ static bool soap_check_zval_ref(zval *data, xmlNodePtr node) { smart_str_free(&prefix); return true; } else { - zend_hash_index_update_ptr(SOAP_GLOBAL(ref_map), (zend_ulong)data, node); + zend_hash_index_update_ptr(SOAP_GLOBAL(ref_map), (zend_ulong)(uintptr_t)data, node); } } return false; @@ -335,7 +335,7 @@ static bool soap_check_xml_ref(zval *data, xmlNodePtr node) zval *data_ptr; if (SOAP_GLOBAL(ref_map)) { - if ((data_ptr = zend_hash_index_find(SOAP_GLOBAL(ref_map), (zend_ulong)node)) != NULL) { + if ((data_ptr = zend_hash_index_find(SOAP_GLOBAL(ref_map), (zend_ulong)(uintptr_t)node)) != NULL) { if (!Z_REFCOUNTED_P(data) || !Z_REFCOUNTED_P(data_ptr) || Z_COUNTED_P(data) != Z_COUNTED_P(data_ptr)) { @@ -351,7 +351,7 @@ static bool soap_check_xml_ref(zval *data, xmlNodePtr node) static void soap_add_xml_ref(zval *data, xmlNodePtr node) { if (SOAP_GLOBAL(ref_map)) { - zend_hash_index_update(SOAP_GLOBAL(ref_map), (zend_ulong)node, data); + zend_hash_index_update(SOAP_GLOBAL(ref_map), (zend_ulong)(uintptr_t)node, data); } } diff --git a/sapi/phpdbg/phpdbg_bp.c b/sapi/phpdbg/phpdbg_bp.c index ccbccc32f711b..069111a1dd4d9 100644 --- a/sapi/phpdbg/phpdbg_bp.c +++ b/sapi/phpdbg/phpdbg_bp.c @@ -805,7 +805,7 @@ PHPDBG_API void phpdbg_set_breakpoint_opcode(const char *name, size_t name_len) PHPDBG_API void phpdbg_set_breakpoint_opline_ex(phpdbg_opline_ptr_t opline) /* {{{ */ { - if (!zend_hash_index_exists(&PHPDBG_G(bp)[PHPDBG_BREAK_OPLINE], (zend_ulong) opline)) { + if (!zend_hash_index_exists(&PHPDBG_G(bp)[PHPDBG_BREAK_OPLINE], (zend_ulong)(uintptr_t) opline)) { phpdbg_breakline_t new_break; PHPDBG_G(flags) |= PHPDBG_HAS_OPLINE_BP; @@ -814,7 +814,7 @@ PHPDBG_API void phpdbg_set_breakpoint_opline_ex(phpdbg_opline_ptr_t opline) /* { new_break.opline = (zend_ulong) opline; new_break.base = NULL; - zend_hash_index_update_mem(&PHPDBG_G(bp)[PHPDBG_BREAK_OPLINE], (zend_ulong) opline, &new_break, sizeof(phpdbg_breakline_t)); + zend_hash_index_update_mem(&PHPDBG_G(bp)[PHPDBG_BREAK_OPLINE], (zend_ulong)(uintptr_t) opline, &new_break, sizeof(phpdbg_breakline_t)); phpdbg_notice("Breakpoint #%d added at #"ZEND_ULONG_FMT, new_break.id, new_break.opline); PHPDBG_BREAK_MAPPING(new_break.id, &PHPDBG_G(bp)[PHPDBG_BREAK_OPLINE]); @@ -1002,7 +1002,7 @@ static inline phpdbg_breakbase_t *phpdbg_find_breakpoint_opline(phpdbg_opline_pt { phpdbg_breakline_t *brake; - if ((brake = zend_hash_index_find_ptr(&PHPDBG_G(bp)[PHPDBG_BREAK_OPLINE], (zend_ulong) opline)) && brake->base) { + if ((brake = zend_hash_index_find_ptr(&PHPDBG_G(bp)[PHPDBG_BREAK_OPLINE], (zend_ulong)(uintptr_t) opline)) && brake->base) { return (phpdbg_breakbase_t *)brake->base; } diff --git a/sapi/phpdbg/phpdbg_prompt.c b/sapi/phpdbg/phpdbg_prompt.c index 07ac772b95d0b..873fd652a32dc 100644 --- a/sapi/phpdbg/phpdbg_prompt.c +++ b/sapi/phpdbg/phpdbg_prompt.c @@ -591,7 +591,7 @@ int phpdbg_skip_line_helper(void) /* {{{ */ { || opline->opcode == ZEND_YIELD || opline->opcode == ZEND_YIELD_FROM ) { - zend_hash_index_update_ptr(&PHPDBG_G(seek), (zend_ulong) opline, (void *) opline); + zend_hash_index_update_ptr(&PHPDBG_G(seek), (zend_ulong)(uintptr_t) opline, (void *) opline); } } while (++opline < op_array->opcodes + op_array->last); @@ -633,7 +633,7 @@ static void phpdbg_seek_to_end(void) /* {{{ */ { case ZEND_GENERATOR_RETURN: case ZEND_YIELD: case ZEND_YIELD_FROM: - zend_hash_index_update_ptr(&PHPDBG_G(seek), (zend_ulong) opline, (void *) opline); + zend_hash_index_update_ptr(&PHPDBG_G(seek), (zend_ulong)(uintptr_t) opline, (void *) opline); } } while (++opline < op_array->opcodes + op_array->last); } @@ -647,7 +647,7 @@ PHPDBG_COMMAND(finish) /* {{{ */ } phpdbg_seek_to_end(); - if (zend_hash_index_exists(&PHPDBG_G(seek), (zend_ulong) phpdbg_user_execute_data(EG(current_execute_data))->opline)) { + if (zend_hash_index_exists(&PHPDBG_G(seek), (zend_ulong)(uintptr_t) phpdbg_user_execute_data(EG(current_execute_data))->opline)) { zend_hash_clean(&PHPDBG_G(seek)); } else { PHPDBG_G(flags) |= PHPDBG_IN_FINISH; @@ -664,7 +664,7 @@ PHPDBG_COMMAND(leave) /* {{{ */ } phpdbg_seek_to_end(); - if (zend_hash_index_exists(&PHPDBG_G(seek), (zend_ulong) phpdbg_user_execute_data(EG(current_execute_data))->opline)) { + if (zend_hash_index_exists(&PHPDBG_G(seek), (zend_ulong)(uintptr_t) phpdbg_user_execute_data(EG(current_execute_data))->opline)) { zend_hash_clean(&PHPDBG_G(seek)); phpdbg_notice("Already at the end of the function"); return SUCCESS; diff --git a/sapi/phpdbg/phpdbg_watch.c b/sapi/phpdbg/phpdbg_watch.c index 5657649efdb69..03804eeaa2523 100644 --- a/sapi/phpdbg/phpdbg_watch.c +++ b/sapi/phpdbg/phpdbg_watch.c @@ -301,7 +301,7 @@ zend_result phpdbg_watchpoint_segfault_handler(siginfo_t *info, void *context) { /* re-enable writing */ mprotect(page, phpdbg_pagesize, PROT_READ | PROT_WRITE); - zend_hash_index_add_empty_element(PHPDBG_G(watchlist_mem), (zend_ulong) page); + zend_hash_index_add_empty_element(PHPDBG_G(watchlist_mem), (zend_ulong)(uintptr_t) page); return SUCCESS; } @@ -317,7 +317,7 @@ void *phpdbg_watchpoint_userfaultfd_thread(void *phpdbg_globals_ptr) { struct uffd_msg fault_msg = {0}; while (read(globals->watch_userfaultfd, &fault_msg, sizeof(fault_msg)) == sizeof(fault_msg)) { void *page = phpdbg_get_page_boundary((char *)(uintptr_t) fault_msg.arg.pagefault.address); - zend_hash_index_add_empty_element(globals->watchlist_mem, (zend_ulong) page); + zend_hash_index_add_empty_element(globals->watchlist_mem, (zend_ulong)(uintptr_t) page); struct uffdio_writeprotect unprotect = { .mode = 0, .range = { @@ -394,8 +394,8 @@ void phpdbg_watch_backup_data(phpdbg_watchpoint_t *watch) { /* watch collisions are responsible for having only one watcher on a given refcounted/refval and having a mapping back to the parent zvals */ void phpdbg_delete_watch_collision(phpdbg_watchpoint_t *watch) { phpdbg_watch_collision *coll; - if ((coll = zend_hash_index_find_ptr(&PHPDBG_G(watch_collisions), (zend_ulong) watch->ref))) { - zend_hash_index_del(&coll->parents, (zend_ulong) watch); + if ((coll = zend_hash_index_find_ptr(&PHPDBG_G(watch_collisions), (zend_ulong)(uintptr_t) watch->ref))) { + zend_hash_index_del(&coll->parents, (zend_ulong)(uintptr_t) watch); if (zend_hash_num_elements(&coll->parents) == 0) { phpdbg_remove_watchpoint_btree(&coll->ref); phpdbg_deactivate_watchpoint(&coll->ref); @@ -411,7 +411,7 @@ void phpdbg_delete_watch_collision(phpdbg_watchpoint_t *watch) { } } - zend_hash_index_del(&PHPDBG_G(watch_collisions), (zend_ulong) watch->ref); + zend_hash_index_del(&PHPDBG_G(watch_collisions), (zend_ulong)(uintptr_t) watch->ref); zend_hash_destroy(&coll->parents); efree(coll); } @@ -433,7 +433,7 @@ void phpdbg_update_watch_ref(phpdbg_watchpoint_t *watch) { watch->ref = Z_COUNTED_P(watch->addr.zv); - if (!(coll = zend_hash_index_find_ptr(&PHPDBG_G(watch_collisions), (zend_ulong) watch->ref))) { + if (!(coll = zend_hash_index_find_ptr(&PHPDBG_G(watch_collisions), (zend_ulong)(uintptr_t) watch->ref))) { coll = emalloc(sizeof(*coll)); coll->ref.type = WATCH_ON_REFCOUNTED; phpdbg_set_addr_watchpoint(Z_COUNTED_P(watch->addr.zv), sizeof(uint32_t), &coll->ref); @@ -462,9 +462,9 @@ void phpdbg_update_watch_ref(phpdbg_watchpoint_t *watch) { } zend_hash_init(&coll->parents, 8, NULL, NULL, 0); - zend_hash_index_add_ptr(&PHPDBG_G(watch_collisions), (zend_ulong) watch->ref, coll); + zend_hash_index_add_ptr(&PHPDBG_G(watch_collisions), (zend_ulong)(uintptr_t) watch->ref, coll); } - zend_hash_index_add_ptr(&coll->parents, (zend_long) watch, watch); + zend_hash_index_add_ptr(&coll->parents, (zend_ulong)(uintptr_t) watch, watch); } else if (Z_TYPE_P(watch->addr.zv) == IS_INDIRECT) { if ((zend_refcounted *) Z_INDIRECT_P(watch->addr.zv) == watch->ref) { return; @@ -476,7 +476,7 @@ void phpdbg_update_watch_ref(phpdbg_watchpoint_t *watch) { watch->ref = (zend_refcounted *) Z_INDIRECT_P(watch->addr.zv); - if (!(coll = zend_hash_index_find_ptr(&PHPDBG_G(watch_collisions), (zend_ulong) watch->ref))) { + if (!(coll = zend_hash_index_find_ptr(&PHPDBG_G(watch_collisions), (zend_ulong)(uintptr_t) watch->ref))) { coll = emalloc(sizeof(*coll)); phpdbg_set_zval_watchpoint(Z_INDIRECT_P(watch->addr.zv), &coll->ref); coll->ref.coll = coll; @@ -486,9 +486,9 @@ void phpdbg_update_watch_ref(phpdbg_watchpoint_t *watch) { phpdbg_watch_backup_data(&coll->ref); zend_hash_init(&coll->parents, 8, NULL, NULL, 0); - zend_hash_index_add_ptr(&PHPDBG_G(watch_collisions), (zend_ulong) watch->ref, coll); + zend_hash_index_add_ptr(&PHPDBG_G(watch_collisions), (zend_ulong)(uintptr_t) watch->ref, coll); } - zend_hash_index_add_ptr(&coll->parents, (zend_long) watch, watch); + zend_hash_index_add_ptr(&coll->parents, (zend_ulong)(uintptr_t) watch, watch); } else if (watch->ref) { phpdbg_delete_watch_collision(watch); watch->ref = NULL; @@ -712,7 +712,7 @@ void phpdbg_queue_element_for_recreation(phpdbg_watch_element *element) { if (!element->parent) { /* HERE BE DRAGONS; i.e. we assume HashTable is directly allocated via emalloc() ... (which *should be* the case for every user-accessible array and symbol tables) */ - zend_hash_index_add_empty_element(&PHPDBG_G(watch_free), (zend_ulong) element->parent_container); + zend_hash_index_add_empty_element(&PHPDBG_G(watch_free), (zend_ulong)(uintptr_t) element->parent_container); } } @@ -775,7 +775,7 @@ void phpdbg_dequeue_elements_for_recreation(void) { ZEND_HASH_MAP_FOREACH_PTR(&PHPDBG_G(watch_recreation), element) { ZEND_ASSERT(element->flags & (PHPDBG_WATCH_IMPLICIT | PHPDBG_WATCH_RECURSIVE_ROOT | PHPDBG_WATCH_SIMPLE)); - if (element->parent || zend_hash_index_find(&PHPDBG_G(watch_free), (zend_ulong) element->parent_container)) { + if (element->parent || zend_hash_index_find(&PHPDBG_G(watch_free), (zend_ulong)(uintptr_t) element->parent_container)) { zval _zv, *zv = &_zv; if (element->parent) { ZEND_ASSERT(element->parent->watch->type == WATCH_ON_ZVAL || element->parent->watch->type == WATCH_ON_BUCKET); @@ -1233,7 +1233,7 @@ void phpdbg_watch_efree(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) { } } - zend_hash_index_del(&PHPDBG_G(watch_free), (zend_ulong) ptr); + zend_hash_index_del(&PHPDBG_G(watch_free), (zend_ulong)(uintptr_t) ptr); } if (PHPDBG_G(original_free_function)) { From 19eabc609f2a417b96075076a2bcc481dac0e747 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20D=C3=BCsterhus?= Date: Mon, 6 Apr 2026 15:53:15 +0200 Subject: [PATCH 6/6] zend_compile: Use `return true` / `return false` for functions returning `bool` (#21649) Changes done with Coccinelle: @r1 exists@ identifier fn; typedef bool; symbol false; symbol true; @@ bool fn ( ... ) { ... return ( - 0 + false | - 1 + true ) ; } --- Zend/zend_compile.c | 110 ++++++++++++++++++++++---------------------- 1 file changed, 55 insertions(+), 55 deletions(-) diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index cebcec3c5b392..7667214861202 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -188,10 +188,10 @@ static bool zend_get_unqualified_name(const zend_string *name, const char **resu if (ns_separator != NULL) { *result = ns_separator + 1; *result_len = ZSTR_VAL(name) + ZSTR_LEN(name) - *result; - return 1; + return true; } - return 0; + return false; } /* }}} */ @@ -234,11 +234,11 @@ static bool zend_is_reserved_class_name(const zend_string *name) /* {{{ */ if (uqname_len == reserved->len && zend_binary_strcasecmp(uqname, uqname_len, reserved->name, reserved->len) == 0 ) { - return 1; + return true; } } - return 0; + return false; } /* }}} */ @@ -1665,13 +1665,13 @@ static bool array_is_const(const zend_array *array) static bool can_ct_eval_const(const zend_constant *c) { if (ZEND_CONSTANT_FLAGS(c) & CONST_DEPRECATED) { - return 0; + return false; } if ((ZEND_CONSTANT_FLAGS(c) & CONST_PERSISTENT) && !(CG(compiler_options) & ZEND_COMPILE_NO_PERSISTENT_CONSTANT_SUBSTITUTION) && !((ZEND_CONSTANT_FLAGS(c) & CONST_NO_FILE_CACHE) && (CG(compiler_options) & ZEND_COMPILE_WITH_FILE_CACHE))) { - return 1; + return true; } if (Z_TYPE(c->value) < IS_ARRAY && !(CG(compiler_options) & ZEND_COMPILE_NO_CONSTANT_SUBSTITUTION)) { @@ -1681,7 +1681,7 @@ static bool can_ct_eval_const(const zend_constant *c) { && array_is_const(Z_ARR(c->value))) { return 1; } - return 0; + return false; } static bool zend_try_ct_eval_const(zval *zv, zend_string *name, bool is_fully_qualified) /* {{{ */ @@ -1698,14 +1698,14 @@ static bool zend_try_ct_eval_const(zval *zv, zend_string *name, bool is_fully_qu zend_constant *c; if ((c = zend_get_special_const(lookup_name, lookup_len))) { ZVAL_COPY_VALUE(zv, &c->value); - return 1; + return true; } c = zend_hash_find_ptr(EG(zend_constants), name); if (c && can_ct_eval_const(c)) { ZVAL_COPY_OR_DUP(zv, &c->value); - return 1; + return true; } - return 0; + return false; } /* }}} */ @@ -1713,12 +1713,12 @@ static inline bool zend_is_scope_known(void) /* {{{ */ { if (!CG(active_op_array)) { /* This can only happen when evaluating a default value string. */ - return 0; + return false; } if (CG(active_op_array)->fn_flags & ZEND_ACC_CLOSURE) { /* Closures can be rebound to a different scope */ - return 0; + return false; } if (!CG(active_class_entry)) { @@ -1735,10 +1735,10 @@ static inline bool zend_is_scope_known(void) /* {{{ */ static inline bool class_name_refers_to_active_ce(const zend_string *class_name, uint32_t fetch_type) /* {{{ */ { if (!CG(active_class_entry)) { - return 0; + return false; } if (fetch_type == ZEND_FETCH_CLASS_SELF && zend_is_scope_known()) { - return 1; + return true; } return fetch_type == ZEND_FETCH_CLASS_DEFAULT && zend_string_equals_ci(class_name, CG(active_class_entry)->name); @@ -1803,7 +1803,7 @@ static bool zend_try_compile_const_expr_resolve_class_name(zval *zv, zend_ast *c const zval *class_name; if (class_ast->kind != ZEND_AST_ZVAL) { - return 0; + return false; } class_name = zend_ast_get_zval(class_ast); @@ -1819,21 +1819,21 @@ static bool zend_try_compile_const_expr_resolve_class_name(zval *zv, zend_ast *c case ZEND_FETCH_CLASS_SELF: if (CG(active_class_entry) && zend_is_scope_known()) { ZVAL_STR_COPY(zv, CG(active_class_entry)->name); - return 1; + return true; } - return 0; + return false; case ZEND_FETCH_CLASS_PARENT: if (CG(active_class_entry) && CG(active_class_entry)->parent_name && zend_is_scope_known()) { ZVAL_STR_COPY(zv, CG(active_class_entry)->parent_name); - return 1; + return true; } - return 0; + return false; case ZEND_FETCH_CLASS_STATIC: - return 0; + return false; case ZEND_FETCH_CLASS_DEFAULT: ZVAL_STR(zv, zend_resolve_class_name_ast(class_ast)); - return 1; + return true; default: ZEND_UNREACHABLE(); } } @@ -1896,11 +1896,11 @@ static bool zend_try_ct_eval_class_const(zval *zv, zend_string *class_name, zend } if (CG(compiler_options) & ZEND_COMPILE_NO_PERSISTENT_CONSTANT_SUBSTITUTION) { - return 0; + return false; } if (!cc || !zend_verify_ct_const_access(cc, CG(active_class_entry))) { - return 0; + return false; } c = &cc->value; @@ -1914,7 +1914,7 @@ static bool zend_try_ct_eval_class_const(zval *zv, zend_string *class_name, zend return 1; } - return 0; + return false; } /* }}} */ @@ -2513,9 +2513,9 @@ static bool zend_ast_kind_is_short_circuited(zend_ast_kind ast_kind) case ZEND_AST_METHOD_CALL: case ZEND_AST_NULLSAFE_METHOD_CALL: case ZEND_AST_STATIC_CALL: - return 1; + return true; default: - return 0; + return false; } } @@ -2530,9 +2530,9 @@ static bool zend_ast_is_short_circuited(const zend_ast *ast) return zend_ast_is_short_circuited(ast->child[0]); case ZEND_AST_NULLSAFE_PROP: case ZEND_AST_NULLSAFE_METHOD_CALL: - return 1; + return true; default: - return 0; + return false; } } @@ -2802,7 +2802,7 @@ static inline bool zend_can_write_to_variable(const zend_ast *ast) /* {{{ */ static inline bool zend_is_const_default_class_ref(zend_ast *name_ast) /* {{{ */ { if (name_ast->kind != ZEND_AST_ZVAL) { - return 0; + return false; } return ZEND_FETCH_CLASS_DEFAULT == zend_get_class_fetch_type_ast(name_ast); @@ -2994,7 +2994,7 @@ static bool is_this_fetch(const zend_ast *ast) /* {{{ */ return Z_TYPE_P(name) == IS_STRING && zend_string_equals(Z_STR_P(name), ZSTR_KNOWN(ZEND_STR_THIS)); } - return 0; + return false; } /* }}} */ @@ -3005,7 +3005,7 @@ static bool is_globals_fetch(const zend_ast *ast) return Z_TYPE_P(name) == IS_STRING && zend_string_equals_literal(Z_STR_P(name), "GLOBALS"); } - return 0; + return false; } static bool is_global_var_fetch(const zend_ast *ast) @@ -3461,7 +3461,7 @@ static void zend_ensure_writable_variable(const zend_ast *ast) /* {{{ */ static bool zend_is_assign_to_self(const zend_ast *var_ast, const zend_ast *expr_ast) /* {{{ */ { if (expr_ast->kind != ZEND_AST_VAR || expr_ast->child[0]->kind != ZEND_AST_ZVAL) { - return 0; + return false; } while (zend_is_variable(var_ast) && var_ast->kind != ZEND_AST_VAR) { @@ -3469,7 +3469,7 @@ static bool zend_is_assign_to_self(const zend_ast *var_ast, const zend_ast *expr } if (var_ast->kind != ZEND_AST_VAR || var_ast->child[0]->kind != ZEND_AST_ZVAL) { - return 0; + return false; } { @@ -4132,10 +4132,10 @@ static inline bool zend_args_contain_unpack_or_named(const zend_ast_list *args) for (i = 0; i < args->children; ++i) { const zend_ast *arg = args->child[i]; if (arg->kind == ZEND_AST_UNPACK || arg->kind == ZEND_AST_NAMED_ARG) { - return 1; + return true; } } - return 0; + return false; } /* }}} */ @@ -5890,7 +5890,7 @@ static bool zend_handle_loops_and_finally_ex(zend_long depth, znode *return_valu zend_loop_var *loop_var = zend_stack_top(&CG(loop_var_stack)); if (!loop_var) { - return 1; + return true; } base = zend_stack_base(&CG(loop_var_stack)); for (; loop_var >= base; loop_var--) { @@ -5945,7 +5945,7 @@ static bool zend_has_finally_ex(zend_long depth) /* {{{ */ zend_loop_var *loop_var = zend_stack_top(&CG(loop_var_stack)); if (!loop_var) { - return 0; + return false; } base = zend_stack_base(&CG(loop_var_stack)); for (; loop_var >= base; loop_var--) { @@ -5961,7 +5961,7 @@ static bool zend_has_finally_ex(zend_long depth) /* {{{ */ depth--; } } - return 0; + return false; } /* }}} */ @@ -6563,7 +6563,7 @@ static uint8_t determine_switch_jumptable_type(const zend_ast_list *cases) { static bool should_use_jumptable(const zend_ast_list *cases, uint8_t jumptable_type) { if (CG(compiler_options) & ZEND_COMPILE_NO_JUMPTABLES) { - return 0; + return false; } /* Thresholds are chosen based on when the average switch time for equidistributed @@ -6746,17 +6746,17 @@ static bool can_match_use_jumptable(const zend_ast_list *arms) { zend_eval_const_expr(cond_ast); if ((*cond_ast)->kind != ZEND_AST_ZVAL) { - return 0; + return false; } const zval *cond_zv = zend_ast_get_zval(*cond_ast); if (Z_TYPE_P(cond_zv) != IS_LONG && Z_TYPE_P(cond_zv) != IS_STRING) { - return 0; + return false; } } } - return 1; + return true; } static bool zend_is_pipe_optimizable_callable_name(zend_ast *ast) @@ -7204,7 +7204,7 @@ bool zend_handle_encoding_declaration(zend_ast *ast) /* {{{ */ if (zend_string_equals_literal_ci(name, "encoding")) { if (value_ast->kind != ZEND_AST_ZVAL) { zend_throw_exception(zend_ce_compile_error, "Encoding must be a literal", 0); - return 0; + return false; } if (CG(multibyte)) { @@ -7238,7 +7238,7 @@ bool zend_handle_encoding_declaration(zend_ast *ast) /* {{{ */ } } - return 1; + return true; } /* }}} */ @@ -7776,14 +7776,14 @@ static bool zend_is_valid_default_value(zend_type type, zval *value) { ZEND_ASSERT(ZEND_TYPE_IS_SET(type)); if (ZEND_TYPE_CONTAINS_CODE(type, Z_TYPE_P(value))) { - return 1; + return true; } if ((ZEND_TYPE_FULL_MASK(type) & MAY_BE_DOUBLE) && Z_TYPE_P(value) == IS_LONG) { /* Integers are allowed as initializers for floating-point values. */ convert_to_double(value); - return 1; + return true; } - return 0; + return false; } static void zend_compile_attributes( @@ -10222,7 +10222,7 @@ static bool zend_try_ct_eval_magic_const(zval *zv, const zend_ast *ast) /* {{{ * default: ZEND_UNREACHABLE(); } - return 1; + return true; } /* }}} */ @@ -10326,12 +10326,12 @@ ZEND_API bool zend_binary_op_produces_error(uint32_t opcode, const zval *op1, co static inline bool zend_try_ct_eval_binary_op(zval *result, uint32_t opcode, zval *op1, zval *op2) /* {{{ */ { if (zend_binary_op_produces_error(opcode, op1, op2)) { - return 0; + return false; } const binary_op_type fn = get_binary_op(opcode); fn(result, op1, op2); - return 1; + return true; } /* }}} */ @@ -10356,12 +10356,12 @@ ZEND_API bool zend_unary_op_produces_error(uint32_t opcode, const zval *op) static inline bool zend_try_ct_eval_unary_op(zval *result, uint32_t opcode, zval *op) /* {{{ */ { if (zend_unary_op_produces_error(opcode, op)) { - return 0; + return false; } const unary_op_type fn = get_unary_op(opcode); fn(result, op); - return 1; + return true; } /* }}} */ @@ -10425,12 +10425,12 @@ static bool zend_try_ct_eval_array(zval *result, zend_ast *ast) /* {{{ */ } if (!is_constant) { - return 0; + return false; } if (!list->children) { ZVAL_EMPTY_ARRAY(result); - return 1; + return true; } array_init_size(result, list->children); @@ -10503,7 +10503,7 @@ static bool zend_try_ct_eval_array(zval *result, zend_ast *ast) /* {{{ */ } } - return 1; + return true; } /* }}} */