Skip to content

Commit d09d03f

Browse files
committed
zend_portability: Remove EMPTY_SWITCH_DEFAULT_CASE()
This macro is exactly as long as explicitly spelling out its definition (excluding the useless `break;`), but hides control flow in its definition. This is giving tools like Coccinelle some troubles to understand the code and can also be confusing for the human reader, because it appears as if it is a statement that belongs to the current case rather than opening a new case.
1 parent 3ac4329 commit d09d03f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+167
-169
lines changed

UPGRADING.INTERNALS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ PHP 8.6 INTERNALS UPGRADE NOTES
2020
. The misnamed ZVAL_IS_NULL() has been removed. Use Z_ISNULL() instead.
2121
. New zend_class_entry.ce_flags2 and zend_function.fn_flags2 fields were
2222
added, given the primary flags were running out of bits.
23+
. The EMPTY_SWITCH_DEFAULT_CASE() macro has been removed. Use
24+
`default: ZEND_UNREACHABLE();` instead.
2325

2426
========================
2527
2. Build system changes

Zend/Optimizer/sccp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1592,7 +1592,7 @@ static void sccp_visit_instr(scdf_ctx *scdf, zend_op *opline, zend_ssa_op *ssa_o
15921592
case ZEND_SHORT_CIRCUITING_CHAIN_EMPTY:
15931593
ZVAL_TRUE(&zv);
15941594
break;
1595-
EMPTY_SWITCH_DEFAULT_CASE()
1595+
default: ZEND_UNREACHABLE();
15961596
}
15971597
SET_RESULT(result, &zv);
15981598
break;

Zend/Optimizer/zend_inference.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1063,7 +1063,7 @@ static bool zend_inference_calc_binary_op_range(
10631063
case ZEND_BW_XOR:
10641064
// TODO
10651065
break;
1066-
EMPTY_SWITCH_DEFAULT_CASE()
1066+
default: ZEND_UNREACHABLE();
10671067
}
10681068
return 0;
10691069
}
@@ -2351,7 +2351,7 @@ static uint32_t binary_op_result_type(
23512351
/* TODO: +MAY_BE_OBJECT ??? */
23522352
tmp = MAY_BE_STRING | MAY_BE_RC1 | MAY_BE_RCN;
23532353
break;
2354-
EMPTY_SWITCH_DEFAULT_CASE()
2354+
default: ZEND_UNREACHABLE();
23552355
}
23562356
return tmp;
23572357
}
@@ -3709,7 +3709,7 @@ static zend_always_inline zend_result _zend_update_type_info(
37093709
case ZEND_FREE:
37103710
/* This may happen if the using opcode is DCEd. */
37113711
break;
3712-
EMPTY_SWITCH_DEFAULT_CASE()
3712+
default: ZEND_UNREACHABLE();
37133713
}
37143714
j = zend_ssa_next_use(ssa->ops, ssa_op->result_def, j);
37153715
if (j >= 0) {
@@ -5296,10 +5296,10 @@ ZEND_API bool zend_may_throw_ex(const zend_op *opline, const zend_ssa_op *ssa_op
52965296
return (t1 & MAY_BE_OBJECT);
52975297
case IS_OBJECT:
52985298
return 0;
5299-
EMPTY_SWITCH_DEFAULT_CASE()
5299+
default: ZEND_UNREACHABLE();
53005300
}
53015301
/* GCC is getting confused here for the Wimplicit-fallthrough warning with
5302-
* EMPTY_SWITCH_DEFAULT_CASE() macro */
5302+
* default: ZEND_UNREACHABLE(); macro */
53035303
return 0;
53045304
case ZEND_ARRAY_KEY_EXISTS:
53055305
if ((t2 & MAY_BE_ANY) != MAY_BE_ARRAY) {

Zend/zend_API.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ ZEND_API const char *zend_get_type_by_const(int type) /* {{{ */
147147
return "mixed";
148148
case _IS_NUMBER:
149149
return "int|float";
150-
EMPTY_SWITCH_DEFAULT_CASE()
150+
default: ZEND_UNREACHABLE();
151151
}
152152
}
153153
/* }}} */
@@ -283,7 +283,7 @@ ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_error(int error_code,
283283
case ZPP_ERROR_FAILURE:
284284
ZEND_ASSERT(EG(exception) && "Should have produced an error already");
285285
break;
286-
EMPTY_SWITCH_DEFAULT_CASE()
286+
default: ZEND_UNREACHABLE();
287287
}
288288
}
289289
/* }}} */

Zend/zend_ast.c

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -731,7 +731,7 @@ static zend_result ZEND_FASTCALL zend_ast_evaluate_inner(
731731
case IS_OBJECT:
732732
zend_cast_zval_to_object(result, &op1, IS_VAR);
733733
break;
734-
EMPTY_SWITCH_DEFAULT_CASE();
734+
default: ZEND_UNREACHABLE();
735735
}
736736
zval_ptr_dtor_nogc(&op1);
737737
if (UNEXPECTED(EG(exception))) {
@@ -1852,7 +1852,7 @@ static ZEND_COLD void zend_ast_export_zval(smart_str *str, const zval *zv, int p
18521852
case IS_CONSTANT_AST:
18531853
zend_ast_export_ex(str, Z_ASTVAL_P(zv), priority, indent);
18541854
break;
1855-
EMPTY_SWITCH_DEFAULT_CASE();
1855+
default: ZEND_UNREACHABLE();
18561856
}
18571857
}
18581858

@@ -2287,7 +2287,7 @@ static ZEND_COLD void zend_ast_export_ex(smart_str *str, zend_ast *ast, int prio
22872287
case T_PROPERTY_C: APPEND_STR("__PROPERTY__");
22882288
case T_NS_C: APPEND_STR("__NAMESPACE__");
22892289
case T_CLASS_C: APPEND_STR("__CLASS__");
2290-
EMPTY_SWITCH_DEFAULT_CASE();
2290+
default: ZEND_UNREACHABLE();
22912291
}
22922292
break;
22932293
case ZEND_AST_TYPE:
@@ -2296,7 +2296,7 @@ static ZEND_COLD void zend_ast_export_ex(smart_str *str, zend_ast *ast, int prio
22962296
case IS_CALLABLE: APPEND_STR("callable");
22972297
case IS_STATIC: APPEND_STR("static");
22982298
case IS_MIXED: APPEND_STR("mixed");
2299-
EMPTY_SWITCH_DEFAULT_CASE();
2299+
default: ZEND_UNREACHABLE();
23002300
}
23012301
break;
23022302

@@ -2323,7 +2323,7 @@ static ZEND_COLD void zend_ast_export_ex(smart_str *str, zend_ast *ast, int prio
23232323
case IS_STRING: PREFIX_OP("(string)", 240, 241);
23242324
case IS_ARRAY: PREFIX_OP("(array)", 240, 241);
23252325
case IS_OBJECT: PREFIX_OP("(object)", 240, 241);
2326-
EMPTY_SWITCH_DEFAULT_CASE();
2326+
default: ZEND_UNREACHABLE();
23272327
}
23282328
break;
23292329
case ZEND_AST_CAST_VOID:
@@ -2357,14 +2357,14 @@ static ZEND_COLD void zend_ast_export_ex(smart_str *str, zend_ast *ast, int prio
23572357
case ZEND_REQUIRE_ONCE: FUNC_OP("require_once");
23582358
case ZEND_REQUIRE: FUNC_OP("require");
23592359
case ZEND_EVAL: FUNC_OP("eval");
2360-
EMPTY_SWITCH_DEFAULT_CASE();
2360+
default: ZEND_UNREACHABLE();
23612361
}
23622362
break;
23632363
case ZEND_AST_UNARY_OP:
23642364
switch (ast->attr) {
23652365
case ZEND_BW_NOT: PREFIX_OP("~", 240, 241);
23662366
case ZEND_BOOL_NOT: PREFIX_OP("!", 240, 241);
2367-
EMPTY_SWITCH_DEFAULT_CASE();
2367+
default: ZEND_UNREACHABLE();
23682368
}
23692369
break;
23702370
case ZEND_AST_PRE_INC:
@@ -2463,7 +2463,7 @@ static ZEND_COLD void zend_ast_export_ex(smart_str *str, zend_ast *ast, int prio
24632463
case ZEND_FETCH_CLASS_PARENT:
24642464
smart_str_append(str, ZSTR_KNOWN(ZEND_STR_PARENT));
24652465
break;
2466-
EMPTY_SWITCH_DEFAULT_CASE()
2466+
default: ZEND_UNREACHABLE();
24672467
}
24682468
} else {
24692469
zend_ast_export_ns_name(str, ast->child[0], 0, indent);
@@ -2486,7 +2486,7 @@ static ZEND_COLD void zend_ast_export_ex(smart_str *str, zend_ast *ast, int prio
24862486
case ZEND_BW_AND: BINARY_OP(" &= ", 90, 91, 90);
24872487
case ZEND_BW_XOR: BINARY_OP(" ^= ", 90, 91, 90);
24882488
case ZEND_POW: BINARY_OP(" **= ", 90, 91, 90);
2489-
EMPTY_SWITCH_DEFAULT_CASE();
2489+
default: ZEND_UNREACHABLE();
24902490
}
24912491
break;
24922492
case ZEND_AST_ASSIGN_COALESCE: BINARY_OP(" \?\?= ", 90, 91, 90);
@@ -2512,7 +2512,7 @@ static ZEND_COLD void zend_ast_export_ex(smart_str *str, zend_ast *ast, int prio
25122512
case ZEND_POW: BINARY_OP(" ** ", 250, 251, 250);
25132513
case ZEND_BOOL_XOR: BINARY_OP(" xor ", 40, 40, 41);
25142514
case ZEND_SPACESHIP: BINARY_OP(" <=> ", 180, 181, 181);
2515-
EMPTY_SWITCH_DEFAULT_CASE();
2515+
default: ZEND_UNREACHABLE();
25162516
}
25172517
break;
25182518
case ZEND_AST_GREATER: BINARY_OP(" > ", 180, 181, 181);
@@ -2864,7 +2864,7 @@ static ZEND_COLD void zend_ast_export_ex(smart_str *str, zend_ast *ast, int prio
28642864
zend_ast_export_indent(str, indent);
28652865
smart_str_appendc(str, '}');
28662866
break;
2867-
EMPTY_SWITCH_DEFAULT_CASE();
2867+
default: ZEND_UNREACHABLE();
28682868
}
28692869
return;
28702870

@@ -2961,7 +2961,7 @@ zend_ast * ZEND_FASTCALL zend_ast_with_attributes(zend_ast *ast, zend_ast *attr)
29612961
* zend_compile_const_decl() checks the kind of the list elements. */
29622962
ast = zend_ast_list_add(ast, attr);
29632963
break;
2964-
EMPTY_SWITCH_DEFAULT_CASE()
2964+
default: ZEND_UNREACHABLE();
29652965
}
29662966

29672967
return ast;

Zend/zend_compile.c

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -872,7 +872,7 @@ static const char *zend_modifier_token_to_string(uint32_t token)
872872
return "protected(set)";
873873
case T_PRIVATE_SET:
874874
return "private(set)";
875-
EMPTY_SWITCH_DEFAULT_CASE()
875+
default: ZEND_UNREACHABLE();
876876
}
877877
}
878878

@@ -1818,7 +1818,7 @@ static bool zend_try_compile_const_expr_resolve_class_name(zval *zv, zend_ast *c
18181818
case ZEND_FETCH_CLASS_DEFAULT:
18191819
ZVAL_STR(zv, zend_resolve_class_name_ast(class_ast));
18201820
return 1;
1821-
EMPTY_SWITCH_DEFAULT_CASE()
1821+
default: ZEND_UNREACHABLE();
18221822
}
18231823
}
18241824
/* }}} */
@@ -2262,7 +2262,7 @@ static void zend_adjust_for_fetch_type(zend_op *opline, znode *result, uint32_t
22622262
case BP_VAR_UNSET:
22632263
opline->opcode += 5 * factor;
22642264
return;
2265-
EMPTY_SWITCH_DEFAULT_CASE()
2265+
default: ZEND_UNREACHABLE();
22662266
}
22672267
}
22682268
/* }}} */
@@ -2425,7 +2425,7 @@ static inline void zend_update_jump_target(uint32_t opnum_jump, uint32_t opnum_t
24252425
case ZEND_JMP_FRAMELESS:
24262426
opline->op2.opline_num = opnum_target;
24272427
break;
2428-
EMPTY_SWITCH_DEFAULT_CASE()
2428+
default: ZEND_UNREACHABLE();
24292429
}
24302430
}
24312431
/* }}} */
@@ -3539,7 +3539,7 @@ static void zend_compile_assign(znode *result, zend_ast *ast) /* {{{ */
35393539

35403540
zend_compile_list_assign(result, var_ast, &expr_node, var_ast->attr);
35413541
return;
3542-
EMPTY_SWITCH_DEFAULT_CASE();
3542+
default: ZEND_UNREACHABLE();
35433543
}
35443544
}
35453545
/* }}} */
@@ -3683,7 +3683,7 @@ static void zend_compile_compound_assign(znode *result, zend_ast *ast) /* {{{ */
36833683
opline = zend_emit_op_data(&expr_node);
36843684
opline->extended_value = cache_slot;
36853685
return;
3686-
EMPTY_SWITCH_DEFAULT_CASE()
3686+
default: ZEND_UNREACHABLE();
36873687
}
36883688
}
36893689
/* }}} */
@@ -4925,7 +4925,7 @@ static zend_result zend_compile_func_sprintf(znode *result, zend_ast_list *args)
49254925
case 'd':
49264926
zend_emit_op_tmp(&elements[placeholder_count], ZEND_CAST, &elements[placeholder_count], NULL)->extended_value = IS_LONG;
49274927
break;
4928-
EMPTY_SWITCH_DEFAULT_CASE();
4928+
default: ZEND_UNREACHABLE();
49294929
}
49304930

49314931
if (rope_elements == 0) {
@@ -5077,7 +5077,7 @@ static const char *zend_get_cstring_from_property_hook_kind(zend_property_hook_k
50775077
return "get";
50785078
case ZEND_PROPERTY_HOOK_SET:
50795079
return "set";
5080-
EMPTY_SWITCH_DEFAULT_CASE()
5080+
default: ZEND_UNREACHABLE();
50815081
}
50825082
}
50835083

@@ -5597,7 +5597,7 @@ static void zend_compile_unset(zend_ast *ast) /* {{{ */
55975597
opline = zend_compile_static_prop(NULL, var_ast, BP_VAR_UNSET, false, false);
55985598
opline->opcode = ZEND_UNSET_STATIC_PROP;
55995599
return;
5600-
EMPTY_SWITCH_DEFAULT_CASE()
5600+
default: ZEND_UNREACHABLE();
56015601
}
56025602
}
56035603
/* }}} */
@@ -9168,7 +9168,7 @@ static void zend_compile_use_trait(zend_ast *ast) /* {{{ */
91689168
case ZEND_AST_TRAIT_ALIAS:
91699169
zend_compile_trait_alias(adaptation_ast);
91709170
break;
9171-
EMPTY_SWITCH_DEFAULT_CASE()
9171+
default: ZEND_UNREACHABLE();
91729172
}
91739173
}
91749174
}
@@ -9543,7 +9543,7 @@ static HashTable *zend_get_import_ht(uint32_t type) /* {{{ */
95439543
zend_hash_init(FC(imports_const), 8, NULL, str_dtor, 0);
95449544
}
95459545
return FC(imports_const);
9546-
EMPTY_SWITCH_DEFAULT_CASE()
9546+
default: ZEND_UNREACHABLE();
95479547
}
95489548

95499549
return NULL;
@@ -9559,7 +9559,7 @@ static char *zend_get_use_type_str(uint32_t type) /* {{{ */
95599559
return " function";
95609560
case ZEND_SYMBOL_CONST:
95619561
return " const";
9562-
EMPTY_SWITCH_DEFAULT_CASE()
9562+
default: ZEND_UNREACHABLE();
95639563
}
95649564

95659565
return " unknown";
@@ -9926,7 +9926,7 @@ static bool zend_try_ct_eval_magic_const(zval *zv, zend_ast *ast) /* {{{ */
99269926
ZVAL_EMPTY_STRING(zv);
99279927
}
99289928
break;
9929-
EMPTY_SWITCH_DEFAULT_CASE()
9929+
default: ZEND_UNREACHABLE();
99309930
}
99319931

99329932
return 1;
@@ -10670,7 +10670,7 @@ static void zend_compile_assign_coalesce(znode *result, zend_ast *ast) /* {{{ */
1067010670
zend_emit_op_data(&default_node);
1067110671
assign_node = var_node_w;
1067210672
break;
10673-
EMPTY_SWITCH_DEFAULT_CASE();
10673+
default: ZEND_UNREACHABLE();
1067410674
}
1067510675

1067610676
opline = zend_emit_op_tmp(NULL, ZEND_QM_ASSIGN, &assign_node, NULL);
@@ -10890,7 +10890,7 @@ static void zend_compile_isset_or_empty(znode *result, zend_ast *ast) /* {{{ */
1089010890
opline = zend_compile_static_prop(result, var_ast, BP_VAR_IS, false, false);
1089110891
opline->opcode = ZEND_ISSET_ISEMPTY_STATIC_PROP;
1089210892
break;
10893-
EMPTY_SWITCH_DEFAULT_CASE()
10893+
default: ZEND_UNREACHABLE();
1089410894
}
1089510895

1089610896
result->op_type = opline->result_type = IS_TMP_VAR;
@@ -11407,7 +11407,7 @@ static void zend_compile_const_expr_class_name(zend_ast **ast_ptr) /* {{{ */
1140711407
zend_error_noreturn(E_COMPILE_ERROR,
1140811408
"static::class cannot be used for compile-time class name resolution");
1140911409
return;
11410-
EMPTY_SWITCH_DEFAULT_CASE()
11410+
default: ZEND_UNREACHABLE();
1141111411
}
1141211412
}
1141311413

@@ -11510,7 +11510,7 @@ static void zend_compile_const_expr_fcc(zend_ast **ast_ptr)
1151011510
case ZEND_AST_STATIC_CALL:
1151111511
args_ast = &(*ast_ptr)->child[2];
1151211512
break;
11513-
EMPTY_SWITCH_DEFAULT_CASE();
11513+
default: ZEND_UNREACHABLE();
1151411514
}
1151511515
if ((*args_ast)->kind != ZEND_AST_CALLABLE_CONVERT) {
1151611516
zend_error_noreturn(E_COMPILE_ERROR, "Constant expression contains invalid operations");
@@ -11548,7 +11548,7 @@ static void zend_compile_const_expr_fcc(zend_ast **ast_ptr)
1154811548
}
1154911549
break;
1155011550
}
11551-
EMPTY_SWITCH_DEFAULT_CASE();
11551+
default: ZEND_UNREACHABLE();
1155211552
}
1155311553
}
1155411554

Zend/zend_compile.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -430,7 +430,7 @@ static zend_always_inline uint32_t zend_visibility_to_set_visibility(uint32_t vi
430430
return ZEND_ACC_PROTECTED_SET;
431431
case ZEND_ACC_PRIVATE:
432432
return ZEND_ACC_PRIVATE_SET;
433-
EMPTY_SWITCH_DEFAULT_CASE();
433+
default: ZEND_UNREACHABLE();
434434
}
435435
}
436436

Zend/zend_execute.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1790,10 +1790,10 @@ ZEND_API ZEND_COLD void zend_wrong_string_offset_error(void)
17901790
case ZEND_FETCH_DIM_INCDEC:
17911791
msg = "Cannot increment/decrement string offsets";
17921792
break;
1793-
EMPTY_SWITCH_DEFAULT_CASE();
1793+
default: ZEND_UNREACHABLE();
17941794
}
17951795
break;
1796-
EMPTY_SWITCH_DEFAULT_CASE();
1796+
default: ZEND_UNREACHABLE();
17971797
}
17981798
ZEND_ASSERT(msg != NULL);
17991799
zend_throw_error(NULL, "%s", msg);
@@ -3502,7 +3502,7 @@ static zend_never_inline bool zend_handle_fetch_obj_flags(
35023502
ZEND_REF_ADD_TYPE_SOURCE(Z_REF_P(ptr), prop_info);
35033503
}
35043504
break;
3505-
EMPTY_SWITCH_DEFAULT_CASE()
3505+
default: ZEND_UNREACHABLE();
35063506
}
35073507
return 1;
35083508
}
@@ -4214,7 +4214,7 @@ static zend_never_inline void zend_fetch_this_var(int type OPLINE_DC EXECUTE_DAT
42144214
ZVAL_UNDEF(result);
42154215
zend_throw_error(NULL, "Cannot unset $this");
42164216
break;
4217-
EMPTY_SWITCH_DEFAULT_CASE()
4217+
default: ZEND_UNREACHABLE();
42184218
}
42194219
}
42204220

@@ -5355,7 +5355,7 @@ static zend_never_inline zend_op_array* ZEND_FASTCALL zend_include_or_eval(zval
53555355
efree(eval_desc);
53565356
}
53575357
break;
5358-
EMPTY_SWITCH_DEFAULT_CASE()
5358+
default: ZEND_UNREACHABLE();
53595359
}
53605360

53615361
zend_tmp_string_release(tmp_inc_filename);

0 commit comments

Comments
 (0)