diff --git a/Zend/Optimizer/block_pass.c b/Zend/Optimizer/block_pass.c index e833ff3dbfd..fb4f82d2a4b 100644 --- a/Zend/Optimizer/block_pass.c +++ b/Zend/Optimizer/block_pass.c @@ -399,7 +399,7 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array Tsource[VAR_NUM(opline->op1.var)] = NULL; break; } - /* break missing intentionally */ + ZEND_FALLTHROUGH; case ZEND_IS_EQUAL: case ZEND_IS_NOT_EQUAL: @@ -1037,7 +1037,7 @@ static void assemble_code_blocks(zend_cfg *cfg, zend_op_array *op_array, zend_op break; case ZEND_JMPZNZ: opline->extended_value = ZEND_OPLINE_TO_OFFSET(opline, new_opcodes + blocks[b->successors[1]].start); - /* break missing intentionally */ + ZEND_FALLTHROUGH; case ZEND_JMPZ: case ZEND_JMPNZ: case ZEND_JMPZ_EX: diff --git a/Zend/Optimizer/compact_literals.c b/Zend/Optimizer/compact_literals.c index 55cc40afb9b..09c63c992a1 100644 --- a/Zend/Optimizer/compact_literals.c +++ b/Zend/Optimizer/compact_literals.c @@ -466,7 +466,7 @@ void zend_optimizer_compact_literals(zend_op_array *op_array, zend_optimizer_ctx map[i] = l_empty_arr; break; } - /* break missing intentionally */ + ZEND_FALLTHROUGH; default: /* don't merge other types */ map[i] = j; diff --git a/Zend/Optimizer/dce.c b/Zend/Optimizer/dce.c index 940f1b6ee2a..1dfed7febdb 100644 --- a/Zend/Optimizer/dce.c +++ b/Zend/Optimizer/dce.c @@ -385,7 +385,7 @@ static inline bool is_free_of_live_var(context *ctx, zend_op *opline, zend_ssa_o if (!(ctx->ssa->var_info[ssa_op->op1_use].type & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) { return 0; } - /* break missing intentionally */ + ZEND_FALLTHROUGH; case ZEND_FE_FREE: return !is_var_dead(ctx, ssa_op->op1_use); default: diff --git a/Zend/Optimizer/dfa_pass.c b/Zend/Optimizer/dfa_pass.c index 90410e5972f..90bd2aa59a2 100644 --- a/Zend/Optimizer/dfa_pass.c +++ b/Zend/Optimizer/dfa_pass.c @@ -613,7 +613,7 @@ static void zend_ssa_replace_control_link(zend_op_array *op_array, zend_ssa *ssa if (ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, opline->extended_value) == old->start) { opline->extended_value = ZEND_OPLINE_NUM_TO_OFFSET(op_array, opline, dst->start); } - /* break missing intentionally */ + ZEND_FALLTHROUGH; case ZEND_JMPZ: case ZEND_JMPNZ: case ZEND_JMPZ_EX: diff --git a/Zend/Optimizer/optimize_func_calls.c b/Zend/Optimizer/optimize_func_calls.c index 319b17438d4..08142c9b039 100644 --- a/Zend/Optimizer/optimize_func_calls.c +++ b/Zend/Optimizer/optimize_func_calls.c @@ -59,7 +59,7 @@ static void zend_delete_call_instructions(zend_op *opline) MAKE_NOP(opline); return; } - /* break missing intentionally */ + ZEND_FALLTHROUGH; case ZEND_NEW: case ZEND_INIT_DYNAMIC_CALL: case ZEND_INIT_USER_CALL: @@ -178,7 +178,7 @@ void zend_optimize_func_calls(zend_op_array *op_array, zend_optimizer_ctx *ctx) ctx->script, op_array, opline, &call_stack[call].is_prototype); call_stack[call].try_inline = !call_stack[call].is_prototype && opline->opcode != ZEND_NEW; - /* break missing intentionally */ + ZEND_FALLTHROUGH; case ZEND_INIT_DYNAMIC_CALL: case ZEND_INIT_USER_CALL: call_stack[call].opline = opline; diff --git a/Zend/Optimizer/sccp.c b/Zend/Optimizer/sccp.c index 5bcf94d144b..82f4d46e36d 100644 --- a/Zend/Optimizer/sccp.c +++ b/Zend/Optimizer/sccp.c @@ -592,7 +592,7 @@ static inline int ct_eval_assign_dim(zval *result, zval *value, zval *key) { case IS_NULL: case IS_FALSE: array_init(result); - /* break missing intentionally */ + ZEND_FALLTHROUGH; case IS_ARRAY: case PARTIAL_ARRAY: return ct_eval_add_array_elem(result, value, key); @@ -695,7 +695,7 @@ static inline int ct_eval_assign_obj(zval *result, zval *value, zval *key) { case IS_NULL: case IS_FALSE: empty_partial_object(result); - /* break missing intentionally */ + ZEND_FALLTHROUGH; case PARTIAL_OBJECT: return ct_eval_add_obj_prop(result, value, key); default: diff --git a/Zend/Optimizer/zend_cfg.c b/Zend/Optimizer/zend_cfg.c index 973a93ef6c4..badf9d298b8 100644 --- a/Zend/Optimizer/zend_cfg.c +++ b/Zend/Optimizer/zend_cfg.c @@ -314,6 +314,7 @@ ZEND_API int zend_build_cfg(zend_arena **arena, const zend_op_array *op_array, u break; case ZEND_INCLUDE_OR_EVAL: flags |= ZEND_FUNC_INDIRECT_VAR_ACCESS; + ZEND_FALLTHROUGH; case ZEND_GENERATOR_CREATE: case ZEND_YIELD: case ZEND_YIELD_FROM: diff --git a/Zend/Optimizer/zend_dfg.c b/Zend/Optimizer/zend_dfg.c index b059f1f0eab..66f3da3782b 100644 --- a/Zend/Optimizer/zend_dfg.c +++ b/Zend/Optimizer/zend_dfg.c @@ -195,7 +195,7 @@ add_op1_def: if (!zend_bitset_in(def, var_num)) { zend_bitset_incl(use, var_num); } - /* break missing intentionally */ + ZEND_FALLTHROUGH; case ZEND_INIT_ARRAY: if (((build_flags & ZEND_SSA_RC_INFERENCE) || (opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) diff --git a/Zend/Optimizer/zend_inference.c b/Zend/Optimizer/zend_inference.c index 4233a8f7efb..323cb06fa7e 100644 --- a/Zend/Optimizer/zend_inference.c +++ b/Zend/Optimizer/zend_inference.c @@ -4474,7 +4474,7 @@ ZEND_API int zend_may_throw_ex(const zend_op *opline, const zend_ssa_op *ssa_op, /* Division by zero */ return 1; } - /* break missing intentionally */ + ZEND_FALLTHROUGH; case ZEND_SUB: case ZEND_MUL: case ZEND_POW: @@ -4574,6 +4574,7 @@ ZEND_API int zend_may_throw_ex(const zend_op *opline, const zend_ssa_op *ssa_op, if (t1 & MAY_BE_REF) { return 1; } + ZEND_FALLTHROUGH; case ZEND_BIND_STATIC: case ZEND_UNSET_VAR: return (t1 & (MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_ARRAY_OF_RESOURCE|MAY_BE_ARRAY_OF_ARRAY)); @@ -4670,6 +4671,9 @@ ZEND_API int zend_may_throw_ex(const zend_op *opline, const zend_ssa_op *ssa_op, return 0; EMPTY_SWITCH_DEFAULT_CASE() } + /* GCC is getting confused here for the Wimplicit-fallthrough warning with + * EMPTY_SWITCH_DEFAULT_CASE() macro */ + return 0; case ZEND_ARRAY_KEY_EXISTS: if ((t2 & MAY_BE_ANY) != MAY_BE_ARRAY) { return 1; diff --git a/Zend/Optimizer/zend_optimizer.c b/Zend/Optimizer/zend_optimizer.c index d6f27b19e68..a93d047f2c4 100644 --- a/Zend/Optimizer/zend_optimizer.c +++ b/Zend/Optimizer/zend_optimizer.c @@ -325,7 +325,7 @@ int zend_optimizer_update_op1_const(zend_op_array *op_array, if (opline->opcode == ZEND_CONCAT && opline->op2_type == IS_CONST) { opline->opcode = ZEND_FAST_CONCAT; } - /* break missing intentionally */ + ZEND_FALLTHROUGH; default: opline->op1.constant = zend_optimizer_add_literal(op_array, val); break; @@ -353,7 +353,7 @@ int zend_optimizer_update_op2_const(zend_op_array *op_array, (opline + 1)->op2.var == opline->result.var) { return 0; } - /* break missing intentionally */ + ZEND_FALLTHROUGH; case ZEND_INSTANCEOF: REQUIRES_STRING(val); drop_leading_backslash(val); @@ -507,7 +507,7 @@ int zend_optimizer_update_op2_const(zend_op_array *op_array, if (opline->opcode == ZEND_CONCAT && opline->op1_type == IS_CONST) { opline->opcode = ZEND_FAST_CONCAT; } - /* break missing intentionally */ + ZEND_FALLTHROUGH; default: opline->op2.constant = zend_optimizer_add_literal(op_array, val); break; @@ -674,7 +674,7 @@ void zend_optimizer_migrate_jump(zend_op_array *op_array, zend_op *new_opline, z break; case ZEND_JMPZNZ: new_opline->extended_value = ZEND_OPLINE_NUM_TO_OFFSET(op_array, new_opline, ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, opline->extended_value)); - /* break missing intentionally */ + ZEND_FALLTHROUGH; case ZEND_JMPZ: case ZEND_JMPNZ: case ZEND_JMPZ_EX: @@ -720,7 +720,7 @@ void zend_optimizer_shift_jump(zend_op_array *op_array, zend_op *opline, uint32_ break; case ZEND_JMPZNZ: opline->extended_value = ZEND_OPLINE_NUM_TO_OFFSET(op_array, opline, ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, opline->extended_value) - shiftlist[ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, opline->extended_value)]); - /* break missing intentionally */ + ZEND_FALLTHROUGH; case ZEND_JMPZ: case ZEND_JMPNZ: case ZEND_JMPZ_EX: diff --git a/Zend/Optimizer/zend_ssa.c b/Zend/Optimizer/zend_ssa.c index 6fe97cbc1e2..8a0c91f87cc 100644 --- a/Zend/Optimizer/zend_ssa.c +++ b/Zend/Optimizer/zend_ssa.c @@ -713,7 +713,7 @@ add_op1_def: break; case ZEND_ADD_ARRAY_ELEMENT: ssa_ops[k].result_use = var[EX_VAR_TO_NUM(opline->result.var)]; - /* break missing intentionally */ + ZEND_FALLTHROUGH; case ZEND_INIT_ARRAY: if (((build_flags & ZEND_SSA_RC_INFERENCE) || (opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) diff --git a/Zend/zend_API.c b/Zend/zend_API.c index ca6214ea1fa..810337e5a98 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -942,6 +942,7 @@ static const char *zend_parse_arg_impl(zval *arg, va_list *va, const char **spec case 'Z': /* replace with 'z' */ case 'L': /* replace with 'l' */ ZEND_ASSERT(0 && "ZPP modifier no longer supported"); + ZEND_FALLTHROUGH; default: return "unknown"; } diff --git a/Zend/zend_ast.c b/Zend/zend_ast.c index b8d35151559..9deb6bcef98 100644 --- a/Zend/zend_ast.c +++ b/Zend/zend_ast.c @@ -2049,7 +2049,7 @@ simple_list: break; case ZEND_AST_PROP_ELEM: smart_str_appendc(str, '$'); - /* break missing intentionally */ + ZEND_FALLTHROUGH; case ZEND_AST_CONST_ELEM: zend_ast_export_name(str, ast->child[0], 0, indent); APPEND_DEFAULT_VALUE(1); diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index 43199e4eccb..2a2e67a8ce1 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -525,7 +525,7 @@ ZEND_FUNCTION(define) val = &val_free; break; } - /* no break */ + ZEND_FALLTHROUGH; default: zval_ptr_dtor(&val_free); zend_argument_type_error(2, "cannot be an object, %s given", zend_zval_type_name(val)); diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 95d376a7059..88593e3a5cc 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -298,7 +298,7 @@ static zend_never_inline ZEND_COLD zval *_get_zval_cv_lookup(zval *ptr, uint32_t break; case BP_VAR_RW: zval_undefined_cv(var EXECUTE_DATA_CC); - /* break missing intentionally */ + ZEND_FALLTHROUGH; case BP_VAR_W: ZVAL_NULL(ptr); break; @@ -1418,6 +1418,7 @@ try_again: } case IS_UNDEF: ZVAL_UNDEFINED_OP2(); + ZEND_FALLTHROUGH; case IS_DOUBLE: case IS_NULL: case IS_FALSE: @@ -2081,7 +2082,7 @@ static zend_never_inline zend_uchar slow_index_convert(HashTable *ht, const zval if (EG(exception)) { return IS_NULL; } - /* break missing intentionally */ + ZEND_FALLTHROUGH; } case IS_NULL: value->str = ZSTR_EMPTY_ALLOC(); @@ -2122,7 +2123,7 @@ num_undef: switch (type) { case BP_VAR_R: zend_undefined_offset(hval); - /* break missing intentionally */ + ZEND_FALLTHROUGH; case BP_VAR_UNSET: case BP_VAR_IS: retval = &EG(uninitialized_zval); @@ -2151,7 +2152,7 @@ str_index: switch (type) { case BP_VAR_R: zend_undefined_index(offset_key); - /* break missing intentionally */ + ZEND_FALLTHROUGH; case BP_VAR_UNSET: case BP_VAR_IS: retval = &EG(uninitialized_zval); @@ -2389,6 +2390,7 @@ try_string_offset: } case IS_UNDEF: ZVAL_UNDEFINED_OP2(); + ZEND_FALLTHROUGH; case IS_DOUBLE: case IS_NULL: case IS_FALSE: diff --git a/Zend/zend_highlight.c b/Zend/zend_highlight.c index 5e94df0a991..501eed57571 100644 --- a/Zend/zend_highlight.c +++ b/Zend/zend_highlight.c @@ -184,7 +184,7 @@ ZEND_API void zend_strip(void) zend_write(" ", sizeof(" ") - 1); prev_space = 1; } - /* lack of break; is intentional */ + ZEND_FALLTHROUGH; case T_COMMENT: case T_DOC_COMMENT: ZVAL_UNDEF(&token); diff --git a/Zend/zend_ini_scanner.l b/Zend/zend_ini_scanner.l index b75387714d0..16b58ac00af 100644 --- a/Zend/zend_ini_scanner.l +++ b/Zend/zend_ini_scanner.l @@ -187,7 +187,7 @@ static void zend_ini_copy_typed_value(zval *retval, const int type, const char * if (convert_to_number(retval, str, len) == SUCCESS) { break; } - /* intentional fall-through */ + ZEND_FALLTHROUGH; default: zend_ini_copy_value(retval, str, len); } @@ -328,6 +328,7 @@ static void zend_ini_escape_string(zval *lval, char *str, int len, char quote_ty *t++ = *s; break; } + ZEND_FALLTHROUGH; case '\\': case '$': *t++ = *s; @@ -606,7 +607,7 @@ end_raw_value_chars: if (YYCURSOR < YYLIMIT && *YYCURSOR != '"') { YYCURSOR++; } - /* fall through */ + ZEND_FALLTHROUGH; default: continue; } diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l index 4fb42022649..c8417ecee32 100644 --- a/Zend/zend_language_scanner.l +++ b/Zend/zend_language_scanner.l @@ -986,6 +986,7 @@ static zend_result zend_scan_escape_string(zval *zendlval, char *str, int len, c *t++ = *s; break; } + ZEND_FALLTHROUGH; case '\\': case '$': *t++ = *s; @@ -2373,7 +2374,7 @@ inline_char_handler: YYCURSOR--; break; } - /* fall through */ + ZEND_FALLTHROUGH; default: continue; } @@ -2556,7 +2557,7 @@ skip_escape_conversion: if (YYCURSOR < YYLIMIT) { YYCURSOR++; } - /* fall through */ + ZEND_FALLTHROUGH; default: continue; } @@ -2793,7 +2794,7 @@ skip_escape_conversion: if (YYCURSOR < YYLIMIT) { YYCURSOR++; } - /* fall through */ + ZEND_FALLTHROUGH; default: continue; } @@ -2840,7 +2841,7 @@ double_quotes_scan_done: if (YYCURSOR < YYLIMIT) { YYCURSOR++; } - /* fall through */ + ZEND_FALLTHROUGH; default: continue; } @@ -2876,7 +2877,7 @@ double_quotes_scan_done: if (*YYCURSOR == '\n') { YYCURSOR++; } - /* fall through */ + ZEND_FALLTHROUGH; case '\n': indentation = spacing = 0; @@ -2946,7 +2947,7 @@ double_quotes_scan_done: if (YYCURSOR < YYLIMIT && *YYCURSOR != '\n' && *YYCURSOR != '\r') { YYCURSOR++; } - /* fall through */ + ZEND_FALLTHROUGH; default: continue; } @@ -3000,7 +3001,7 @@ heredoc_scan_done: if (*YYCURSOR == '\n') { YYCURSOR++; } - /* fall through */ + ZEND_FALLTHROUGH; case '\n': indentation = spacing = 0; @@ -3051,7 +3052,7 @@ heredoc_scan_done: goto nowdoc_scan_done; } - /* fall through */ + ZEND_FALLTHROUGH; default: continue; } diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index f10e2c58a6b..53c7cc00780 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -1812,7 +1812,7 @@ ZEND_API HashTable *zend_std_get_properties_for(zend_object *obj, zend_prop_purp } return ht; } - /* break missing intentionally */ + ZEND_FALLTHROUGH; case ZEND_PROP_PURPOSE_ARRAY_CAST: case ZEND_PROP_PURPOSE_SERIALIZE: case ZEND_PROP_PURPOSE_VAR_EXPORT: diff --git a/Zend/zend_opcode.c b/Zend/zend_opcode.c index 0cced91a848..e23892a08c7 100644 --- a/Zend/zend_opcode.c +++ b/Zend/zend_opcode.c @@ -793,7 +793,7 @@ static void emit_live_range( return; } } - /* explicit fallthrough */ + ZEND_FALLTHROUGH; default: start++; kind = ZEND_LIVE_TMPVAR; @@ -1083,14 +1083,14 @@ ZEND_API void pass_two(zend_op_array *op_array) if (op_array->fn_flags & ZEND_ACC_HAS_FINALLY_BLOCK) { zend_check_finally_breakout(op_array, opline - op_array->opcodes, opline->op1.opline_num); } - /* break omitted intentionally */ + ZEND_FALLTHROUGH; case ZEND_JMP: ZEND_PASS_TWO_UPDATE_JMP_TARGET(op_array, opline, opline->op1); break; case ZEND_JMPZNZ: /* absolute index to relative offset */ opline->extended_value = ZEND_OPLINE_NUM_TO_OFFSET(op_array, opline, opline->extended_value); - /* break omitted intentionally */ + ZEND_FALLTHROUGH; case ZEND_JMPZ: case ZEND_JMPNZ: case ZEND_JMPZ_EX: diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c index db53c71317a..acac4a02848 100644 --- a/Zend/zend_operators.c +++ b/Zend/zend_operators.c @@ -104,11 +104,11 @@ ZEND_API int ZEND_FASTCALL zend_atoi(const char *str, size_t str_len) /* {{{ */ case 'g': case 'G': retval *= 1024; - /* break intentionally missing */ + ZEND_FALLTHROUGH; case 'm': case 'M': retval *= 1024; - /* break intentionally missing */ + ZEND_FALLTHROUGH; case 'k': case 'K': retval *= 1024; @@ -132,11 +132,11 @@ ZEND_API zend_long ZEND_FASTCALL zend_atol(const char *str, size_t str_len) /* { case 'g': case 'G': retval *= 1024; - /* break intentionally missing */ + ZEND_FALLTHROUGH; case 'm': case 'M': retval *= 1024; - /* break intentionally missing */ + ZEND_FALLTHROUGH; case 'k': case 'K': retval *= 1024; @@ -2461,7 +2461,7 @@ try_again: return SUCCESS; } } - /* break missing intentionally */ + ZEND_FALLTHROUGH; case IS_RESOURCE: case IS_ARRAY: zend_type_error("Cannot increment %s", zend_zval_type_name(op1)); @@ -2523,7 +2523,7 @@ try_again: return SUCCESS; } } - /* break missing intentionally */ + ZEND_FALLTHROUGH; case IS_RESOURCE: case IS_ARRAY: zend_type_error("Cannot decrement %s", zend_zval_type_name(op1)); diff --git a/Zend/zend_portability.h b/Zend/zend_portability.h index cda61117ea8..06d4123e7f7 100644 --- a/Zend/zend_portability.h +++ b/Zend/zend_portability.h @@ -113,6 +113,13 @@ # define ZEND_UNREACHABLE() ZEND_ASSUME(0) #endif +/* pseudo fallthrough keyword; */ +#if defined(__GNUC__) && __GNUC__ >= 7 +# define ZEND_FALLTHROUGH __attribute__((__fallthrough__)) +#else +# 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; diff --git a/Zend/zend_strtod.c b/Zend/zend_strtod.c index 9173a150319..d2581f8013f 100644 --- a/Zend/zend_strtod.c +++ b/Zend/zend_strtod.c @@ -1911,7 +1911,7 @@ gethex( CONST char **sp, U *rvp, int rounding, int sign) switch(*++s) { case '-': esign = 1; - /* no break */ + ZEND_FALLTHROUGH; case '+': s++; } @@ -2578,11 +2578,11 @@ zend_strtod for(s = s00;;s++) switch(*s) { case '-': sign = 1; - /* no break */ + ZEND_FALLTHROUGH; case '+': if (*++s) goto break2; - /* no break */ + ZEND_FALLTHROUGH; case 0: goto ret0; case '\t': @@ -2698,6 +2698,7 @@ zend_strtod switch(c = *++s) { case '-': esign = 1; + ZEND_FALLTHROUGH; case '+': c = *++s; } @@ -3952,7 +3953,7 @@ zend_dtoa break; case 2: leftright = 0; - /* no break */ + ZEND_FALLTHROUGH; case 4: if (ndigits <= 0) ndigits = 1; @@ -3960,7 +3961,7 @@ zend_dtoa break; case 3: leftright = 0; - /* no break */ + ZEND_FALLTHROUGH; case 5: i = ndigits + k + 1; ilim = i; diff --git a/Zend/zend_virtual_cwd.c b/Zend/zend_virtual_cwd.c index 71f97814426..d394f6ce87d 100644 --- a/Zend/zend_virtual_cwd.c +++ b/Zend/zend_virtual_cwd.c @@ -1673,7 +1673,7 @@ CWD_API FILE *virtual_popen(const char *command, const char *type) /* {{{ */ *ptr++ = '\''; *ptr++ = '\\'; *ptr++ = '\''; - /* fall-through */ + ZEND_FALLTHROUGH; default: *ptr++ = *dir; } diff --git a/ext/curl/interface.c b/ext/curl/interface.c index d8ce11df37b..26a88dda373 100644 --- a/ext/curl/interface.c +++ b/ext/curl/interface.c @@ -2277,6 +2277,7 @@ static int _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue, bool i error = curl_easy_setopt(ch->cp, option, 2); break; } + ZEND_FALLTHROUGH; case CURLOPT_AUTOREFERER: case CURLOPT_BUFFERSIZE: case CURLOPT_CONNECTTIMEOUT: @@ -2667,7 +2668,7 @@ static int _php_curl_setopt(php_curl *ch, zend_long option, zval *zvalue, bool i zend_value_error("%s(): The provided file handle must be writable", get_active_function_name()); return FAILURE; } - /* break omitted intentionally */ + ZEND_FALLTHROUGH; default: error = curl_easy_setopt(ch->cp, option, fp); break; diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 2656c02cbf3..40f0ab6571c 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -713,8 +713,8 @@ static zend_string *date_format(const char *format, size_t format_len, timelib_t length = slprintf(buffer, sizeof(buffer), "%s", "Z"); break; } - /* break intentionally missing */ - case 'P': rfc_colon = 1; /* break intentionally missing */ + ZEND_FALLTHROUGH; + case 'P': rfc_colon = 1; ZEND_FALLTHROUGH; case 'O': length = slprintf(buffer, sizeof(buffer), "%c%02d%s%02d", localtime ? ((offset->offset < 0) ? '-' : '+') : '+', localtime ? abs(offset->offset / 3600) : 0, @@ -765,7 +765,7 @@ static zend_string *date_format(const char *format, size_t format_len, timelib_t break; case 'U': length = slprintf(buffer, sizeof(buffer), "%lld", (timelib_sll) t->sse); break; - case '\\': if (i < format_len) i++; /* break intentionally missing */ + case '\\': if (i < format_len) i++; ZEND_FALLTHROUGH; default: buffer[0] = format[i]; buffer[1] = '\0'; length = 1; break; } diff --git a/ext/dba/dba.c b/ext/dba/dba.c index f0f1beed752..052e5be2f4e 100644 --- a/ext/dba/dba.c +++ b/ext/dba/dba.c @@ -637,7 +637,7 @@ static void php_dba_open(INTERNAL_FUNCTION_PARAMETERS, int persistent) lock_flag = (hptr->flags & DBA_LOCK_ALL); break; } - /* no break */ + ZEND_FALLTHROUGH; case 'l': lock_flag = DBA_LOCK_ALL; if ((hptr->flags & DBA_LOCK_ALL) == 0) { diff --git a/ext/dom/node.c b/ext/dom/node.c index 253073598c3..1efc23bfad4 100644 --- a/ext/dom/node.c +++ b/ext/dom/node.c @@ -184,6 +184,7 @@ int dom_node_node_value_write(dom_object *obj, zval *newval) php_libxml_node_free_list((xmlNodePtr) nodep->children); nodep->children = NULL; } + ZEND_FALLTHROUGH; case XML_TEXT_NODE: case XML_COMMENT_NODE: case XML_CDATA_SECTION_NODE: @@ -618,6 +619,7 @@ int dom_node_prefix_write(dom_object *obj, zval *newval) switch (nodep->type) { case XML_ELEMENT_NODE: nsnode = nodep; + ZEND_FALLTHROUGH; case XML_ATTRIBUTE_NODE: if (nsnode == NULL) { nsnode = nodep->parent; diff --git a/ext/exif/exif.c b/ext/exif/exif.c index e54d508b0e6..894cb1106e5 100644 --- a/ext/exif/exif.c +++ b/ext/exif/exif.c @@ -2216,11 +2216,14 @@ static void exif_iif_add_value(image_info_type *image_info, int section_index, c * return; */ info_data->tag = TAG_FMT_UNDEFINED;/* otherwise not freed from memory */ + ZEND_FALLTHROUGH; case TAG_FMT_SBYTE: case TAG_FMT_BYTE: /* in contrast to strings bytes do not need to allocate buffer for NULL if length==0 */ - if (!length) + if (!length) { break; + } + ZEND_FALLTHROUGH; case TAG_FMT_UNDEFINED: if (length > value_len) { exif_error_docref("exif_iif_add_value" EXIFERR_CC, image_info, E_WARNING, "length > value_len: %d > %zu", length, value_len); @@ -2520,6 +2523,7 @@ static void add_assoc_image_info(zval *value, int sub_array, image_info_type *im } break; } + ZEND_FALLTHROUGH; case TAG_FMT_USHORT: case TAG_FMT_ULONG: if (l==1) { @@ -2546,6 +2550,7 @@ static void add_assoc_image_info(zval *value, int sub_array, image_info_type *im } break; } + ZEND_FALLTHROUGH; case TAG_FMT_SSHORT: case TAG_FMT_SLONG: if (l==1) { diff --git a/ext/ffi/ffi.c b/ext/ffi/ffi.c index 21c6dcf451f..c07a6724689 100644 --- a/ext/ffi/ffi.c +++ b/ext/ffi/ffi.c @@ -2617,7 +2617,7 @@ static int zend_ffi_pass_var_arg(zval *arg, ffi_type **pass_type, void **arg_val return zend_ffi_pass_arg(arg, type, pass_type, arg_values, n, execute_data); } - /* break missing intentionally */ + ZEND_FALLTHROUGH; default: zend_throw_error(zend_ffi_exception_ce, "Unsupported argument type"); return FAILURE; diff --git a/ext/filter/logical_filters.c b/ext/filter/logical_filters.c index 93367fc4149..41774c55cca 100644 --- a/ext/filter/logical_filters.c +++ b/ext/filter/logical_filters.c @@ -99,6 +99,7 @@ static int php_filter_parse_int(const char *str, size_t str_len, zend_long *ret) switch (*str) { case '-': sign = 1; + ZEND_FALLTHROUGH; case '+': str++; default: diff --git a/ext/gd/libgd/gd_interpolation.c b/ext/gd/libgd/gd_interpolation.c index f1235f9d7e3..a7cf69165ca 100644 --- a/ext/gd/libgd/gd_interpolation.c +++ b/ext/gd/libgd/gd_interpolation.c @@ -2465,6 +2465,7 @@ int gdImageSetInterpolationMethod(gdImagePtr im, gdInterpolationMethod id) switch (id) { case GD_DEFAULT: id = GD_BILINEAR_FIXED; + ZEND_FALLTHROUGH; /* Optimized versions */ case GD_BILINEAR_FIXED: case GD_BICUBIC_FIXED: diff --git a/ext/gd/libgd/gd_png.c b/ext/gd/libgd/gd_png.c index f628d876ef5..17919598e51 100644 --- a/ext/gd/libgd/gd_png.c +++ b/ext/gd/libgd/gd_png.c @@ -309,26 +309,26 @@ gdImagePtr gdImageCreateFromPngCtx (gdIOCtx * infile) case PNG_COLOR_TYPE_GRAY_ALPHA: png_set_gray_to_rgb(png_ptr); - - case PNG_COLOR_TYPE_RGB: - case PNG_COLOR_TYPE_RGB_ALPHA: - /* gd 2.0: we now support truecolor. See the comment above - * for a rare situation in which the transparent pixel may not - * work properly with 16-bit channels. - */ - if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) { - png_get_tRNS(png_ptr, info_ptr, NULL, NULL, &trans_color_rgb); - if (bit_depth == 16) { /* png_set_strip_16() not yet in effect */ - transparent = gdTrueColor(trans_color_rgb->red >> 8, - trans_color_rgb->green >> 8, - trans_color_rgb->blue >> 8); - } else { - transparent = gdTrueColor(trans_color_rgb->red, - trans_color_rgb->green, - trans_color_rgb->blue); - } + ZEND_FALLTHROUGH; + case PNG_COLOR_TYPE_RGB: + case PNG_COLOR_TYPE_RGB_ALPHA: + /* gd 2.0: we now support truecolor. See the comment above + * for a rare situation in which the transparent pixel may not + * work properly with 16-bit channels. + */ + if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) { + png_get_tRNS(png_ptr, info_ptr, NULL, NULL, &trans_color_rgb); + if (bit_depth == 16) { /* png_set_strip_16() not yet in effect */ + transparent = gdTrueColor(trans_color_rgb->red >> 8, + trans_color_rgb->green >> 8, + trans_color_rgb->blue >> 8); + } else { + transparent = gdTrueColor(trans_color_rgb->red, + trans_color_rgb->green, + trans_color_rgb->blue); } - break; + } + break; } png_read_update_info(png_ptr, info_ptr); diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c index 7ccbb826629..37c069235a2 100644 --- a/ext/iconv/iconv.c +++ b/ext/iconv/iconv.c @@ -1514,6 +1514,8 @@ static php_iconv_err_t _php_iconv_mime_decode(smart_str *pretval, const char *st } else { break; } + /* TODO might want to rearrange logic so this is more obvious */ + ZEND_FALLTHROUGH; case 9: /* choice point, seeing what to do next.*/ switch (*p1) { @@ -1537,7 +1539,7 @@ static php_iconv_err_t _php_iconv_mime_decode(smart_str *pretval, const char *st break; } } - /* break is omitted intentionally */ + ZEND_FALLTHROUGH; case '\r': case '\n': case ' ': case '\t': { zend_string *decoded_text; @@ -1688,7 +1690,7 @@ static php_iconv_err_t _php_iconv_mime_decode(smart_str *pretval, const char *st scan_stat = 1; break; } - /* break is omitted intentionally */ + ZEND_FALLTHROUGH; default: _php_iconv_appendc(pretval, *p1, cd_pl); diff --git a/ext/imap/php_imap.c b/ext/imap/php_imap.c index 9a1ded643b2..be5dbf12ad4 100644 --- a/ext/imap/php_imap.c +++ b/ext/imap/php_imap.c @@ -2377,6 +2377,7 @@ PHP_FUNCTION(imap_utf7_decode) case ST_DECODE2: case ST_DECODE1: outlen++; + ZEND_FALLTHROUGH; case ST_DECODE0: state++; case ST_NORMAL: diff --git a/ext/json/json_encoder.c b/ext/json/json_encoder.c index 2888a7090ce..81003f06133 100644 --- a/ext/json/json_encoder.c +++ b/ext/json/json_encoder.c @@ -635,6 +635,7 @@ again: return php_json_encode_serializable_enum(buf, val, options, encoder); } /* fallthrough -- Non-serializable object */ + ZEND_FALLTHROUGH; case IS_ARRAY: { /* Avoid modifications (and potential freeing) of the array through a reference when a * jsonSerialize() method is invoked. */ diff --git a/ext/ldap/ldap.c b/ext/ldap/ldap.c index 5108d68b4e9..99ffce179fb 100644 --- a/ext/ldap/ldap.c +++ b/ext/ldap/ldap.c @@ -1592,12 +1592,16 @@ static void php_ldap_do_search(INTERNAL_FUNCTION_PARAMETERS, int scope) case 9: case 8: ldap_deref = deref; + ZEND_FALLTHROUGH; case 7: ldap_timelimit = timelimit; + ZEND_FALLTHROUGH; case 6: ldap_sizelimit = sizelimit; + ZEND_FALLTHROUGH; case 5: ldap_attrsonly = attrsonly; + ZEND_FALLTHROUGH; case 4: num_attribs = zend_hash_num_elements(Z_ARRVAL_P(attrs)); ldap_attrs = safe_emalloc((num_attribs+1), sizeof(char *), 0); @@ -1617,6 +1621,7 @@ static void php_ldap_do_search(INTERNAL_FUNCTION_PARAMETERS, int scope) ldap_attrs[i] = Z_STRVAL_P(attr); } ldap_attrs[num_attribs] = NULL; + ZEND_FALLTHROUGH; default: break; } @@ -3465,6 +3470,7 @@ PHP_FUNCTION(ldap_parse_result) switch (myargcount) { case 7: _php_ldap_controls_to_array(ld->link, lserverctrls, serverctrls, 0); + ZEND_FALLTHROUGH; case 6: referrals = zend_try_array_init(referrals); if (!referrals) { @@ -3478,6 +3484,7 @@ PHP_FUNCTION(ldap_parse_result) } ldap_memvfree((void**)lreferrals); } + ZEND_FALLTHROUGH; case 5: if (lerrmsg == NULL) { ZEND_TRY_ASSIGN_REF_EMPTY_STRING(errmsg); @@ -3485,6 +3492,7 @@ PHP_FUNCTION(ldap_parse_result) ZEND_TRY_ASSIGN_REF_STRING(errmsg, lerrmsg); ldap_memfree(lerrmsg); } + ZEND_FALLTHROUGH; case 4: if (lmatcheddn == NULL) { ZEND_TRY_ASSIGN_REF_EMPTY_STRING(matcheddn); @@ -3538,6 +3546,7 @@ PHP_FUNCTION(ldap_parse_exop) ZEND_TRY_ASSIGN_REF_STRING(retoid, lretoid); ldap_memfree(lretoid); } + ZEND_FALLTHROUGH; case 3: /* use arg #3 as the data returned by the server */ if (lretdata == NULL) { diff --git a/ext/libxml/libxml.c b/ext/libxml/libxml.c index cc191901987..644a5026e1b 100644 --- a/ext/libxml/libxml.c +++ b/ext/libxml/libxml.c @@ -165,6 +165,7 @@ static void php_libxml_node_free(xmlNodePtr node) node->ns = NULL; } node->type = XML_ELEMENT_NODE; + ZEND_FALLTHROUGH; default: xmlFreeNode(node); } @@ -188,9 +189,10 @@ PHP_LIBXML_API void php_libxml_node_free_list(xmlNodePtr node) php_libxml_node_free_list((xmlNodePtr) node->properties); break; case XML_ATTRIBUTE_NODE: - if ((node->doc != NULL) && (((xmlAttrPtr) node)->atype == XML_ATTRIBUTE_ID)) { - xmlRemoveID(node->doc, (xmlAttrPtr) node); - } + if ((node->doc != NULL) && (((xmlAttrPtr) node)->atype == XML_ATTRIBUTE_ID)) { + xmlRemoveID(node->doc, (xmlAttrPtr) node); + } + ZEND_FALLTHROUGH; case XML_ATTRIBUTE_DECL: case XML_DTD_NODE: case XML_DOCUMENT_TYPE_NODE: diff --git a/ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.c b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.c index 12e5cdca8f3..592f889f9c8 100644 --- a/ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.c +++ b/ext/mbstring/libmbfl/filters/mbfilter_sjis_mac.c @@ -373,6 +373,7 @@ mbfl_filt_conv_wchar_sjis_mac(int c, mbfl_convert_filter *filter) break; } s1 = s2 = 0; + ZEND_FALLTHROUGH; case 0: diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c index 416dc9a6af5..45e66ec5d30 100644 --- a/ext/mbstring/mbstring.c +++ b/ext/mbstring/mbstring.c @@ -3351,7 +3351,7 @@ static int _php_mbstr_parse_mail_headers(HashTable *ht, const char *str, size_t state = 3; break; } - /* break is missing intentionally */ + ZEND_FALLTHROUGH; case 3: if (crlf_state == -1) { diff --git a/ext/mysqlnd/mysqlnd_connection.c b/ext/mysqlnd/mysqlnd_connection.c index 8730de04b1f..40c7bb0b77d 100644 --- a/ext/mysqlnd/mysqlnd_connection.c +++ b/ext/mysqlnd/mysqlnd_connection.c @@ -1245,7 +1245,7 @@ MYSQLND_METHOD(mysqlnd_conn_data, send_close)(MYSQLND_CONN_DATA * const conn) Do nothing, the connection will be brutally closed and the server will catch it and free close from its side. */ - /* Fall-through */ + ZEND_FALLTHROUGH; case CONN_ALLOCED: /* Allocated but not connected or there was failure when trying @@ -1254,7 +1254,7 @@ MYSQLND_METHOD(mysqlnd_conn_data, send_close)(MYSQLND_CONN_DATA * const conn) Fall-through */ SET_CONNECTION_STATE(&conn->state, CONN_QUIT_SENT); - /* Fall-through */ + ZEND_FALLTHROUGH; case CONN_QUIT_SENT: /* The user has killed its own connection */ vio->data->m.close_stream(vio, conn->stats, conn->error_info); diff --git a/ext/mysqlnd/mysqlnd_debug.c b/ext/mysqlnd/mysqlnd_debug.c index edc3c250b5a..f2f7a3b631a 100644 --- a/ext/mysqlnd/mysqlnd_debug.c +++ b/ext/mysqlnd/mysqlnd_debug.c @@ -515,6 +515,7 @@ MYSQLND_METHOD(mysqlnd_debug, set_mode)(MYSQLND_DEBUG * self, const char * const case 'O': case 'A': self->flags |= MYSQLND_DEBUG_FLUSH; + ZEND_FALLTHROUGH; case 'a': case 'o': if (mode[i] == 'a' || mode[i] == 'A') { diff --git a/ext/mysqlnd/mysqlnd_ps_codec.c b/ext/mysqlnd/mysqlnd_ps_codec.c index eba4805b9de..c8178c76c6b 100644 --- a/ext/mysqlnd/mysqlnd_ps_codec.c +++ b/ext/mysqlnd/mysqlnd_ps_codec.c @@ -712,7 +712,7 @@ mysqlnd_stmt_execute_calculate_param_values_size(MYSQLND_STMT_DATA * stmt, zval break; case MYSQL_TYPE_LONGLONG: is_longlong = 4; - /* fall-through */ + ZEND_FALLTHROUGH; case MYSQL_TYPE_LONG: { zval *tmp_data = (*copies_param && !Z_ISUNDEF((*copies_param)[i]))? &(*copies_param)[i]: the_var; diff --git a/ext/odbc/php_odbc.c b/ext/odbc/php_odbc.c index 05e371d05fe..bb19d6f0877 100644 --- a/ext/odbc/php_odbc.c +++ b/ext/odbc/php_odbc.c @@ -662,6 +662,8 @@ int odbc_bindcols(odbc_result *result) #else charextraalloc = 1; #endif + /* TODO: Check this is the intended behaviour */ + ZEND_FALLTHROUGH; default: rc = PHP_ODBC_SQLCOLATTRIBUTE(result->stmt, (SQLUSMALLINT)(i+1), colfieldid, NULL, 0, NULL, &displaysize); @@ -1419,6 +1421,7 @@ static void php_odbc_fetch_hash(INTERNAL_FUNCTION_PARAMETERS, int result_type) if (result->binmode == 1) { sql_c_type = SQL_C_BINARY; } + ZEND_FALLTHROUGH; case SQL_LONGVARCHAR: #if defined(ODBCVER) && (ODBCVER >= 0x0300) case SQL_WLONGVARCHAR: @@ -1573,6 +1576,8 @@ PHP_FUNCTION(odbc_fetch_into) } if (result->binmode == 1) sql_c_type = SQL_C_BINARY; + /* TODO: Check this is the intended behaviour */ + ZEND_FALLTHROUGH; case SQL_LONGVARCHAR: #if defined(ODBCVER) && (ODBCVER >= 0x0300) case SQL_WLONGVARCHAR: @@ -1797,6 +1802,9 @@ PHP_FUNCTION(odbc_result) if (result->binmode <= 0) { break; } + /* TODO: Check this is the intended behaviour */ + ZEND_FALLTHROUGH; + case SQL_LONGVARCHAR: #if defined(ODBCVER) && (ODBCVER >= 0x0300) case SQL_WLONGVARCHAR: @@ -1969,6 +1977,9 @@ PHP_FUNCTION(odbc_result_all) break; } if (result->binmode <= 1) sql_c_type = SQL_C_BINARY; + + /* TODO: Check this is the intended behaviour */ + ZEND_FALLTHROUGH; case SQL_LONGVARCHAR: #if defined(ODBCVER) && (ODBCVER >= 0x0300) case SQL_WLONGVARCHAR: diff --git a/ext/opcache/jit/zend_jit.c b/ext/opcache/jit/zend_jit.c index 70f62b796dd..56146839467 100644 --- a/ext/opcache/jit/zend_jit.c +++ b/ext/opcache/jit/zend_jit.c @@ -678,6 +678,7 @@ static int zend_may_overflow(const zend_op *opline, const zend_ssa_op *ssa_op, c ssa->var_info[res].range.underflow || ssa->var_info[res].range.overflow); } + ZEND_FALLTHROUGH; default: return 1; } @@ -2827,7 +2828,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op goto done; case ZEND_DO_UCALL: is_terminated = 1; - /* break missing intentionally */ + ZEND_FALLTHROUGH; case ZEND_DO_ICALL: case ZEND_DO_FCALL_BY_NAME: case ZEND_DO_FCALL: @@ -3016,7 +3017,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op } goto done; } - /* break missing intentionally */ + ZEND_FALLTHROUGH; case ZEND_JMPZNZ: case ZEND_JMPZ_EX: case ZEND_JMPNZ_EX: @@ -3421,7 +3422,7 @@ static int zend_jit(const zend_op_array *op_array, zend_ssa *ssa, const zend_op } goto done; } - /* break missing intentionally */ + ZEND_FALLTHROUGH; case ZEND_JMPZ_EX: case ZEND_JMPNZ_EX: case ZEND_JMP_SET: diff --git a/ext/opcache/jit/zend_jit_helpers.c b/ext/opcache/jit/zend_jit_helpers.c index 53e0107bdc7..4b59545b312 100644 --- a/ext/opcache/jit/zend_jit_helpers.c +++ b/ext/opcache/jit/zend_jit_helpers.c @@ -390,7 +390,7 @@ static void ZEND_FASTCALL zend_jit_fetch_dim_r_helper(zend_array *ht, zval *dim, goto str_index; case IS_UNDEF: zend_jit_undefined_op_helper(EG(current_execute_data)->opline->op2.var); - /* break missing intentionally */ + ZEND_FALLTHROUGH; case IS_NULL: offset_key = ZSTR_EMPTY_ALLOC(); goto str_index; @@ -455,7 +455,7 @@ static void ZEND_FASTCALL zend_jit_fetch_dim_is_helper(zend_array *ht, zval *dim goto str_index; case IS_UNDEF: zend_jit_undefined_op_helper(EG(current_execute_data)->opline->op2.var); - /* break missing intentionally */ + ZEND_FALLTHROUGH; case IS_NULL: offset_key = ZSTR_EMPTY_ALLOC(); goto str_index; @@ -518,7 +518,7 @@ static int ZEND_FASTCALL zend_jit_fetch_dim_isset_helper(zend_array *ht, zval *d goto str_index; case IS_UNDEF: zend_jit_undefined_op_helper(EG(current_execute_data)->opline->op2.var); - /* break missing intentionally */ + ZEND_FALLTHROUGH; case IS_NULL: offset_key = ZSTR_EMPTY_ALLOC(); goto str_index; @@ -585,7 +585,7 @@ static zval* ZEND_FASTCALL zend_jit_fetch_dim_rw_helper(zend_array *ht, zval *di if (!zend_jit_undefined_op_helper_write(ht, EG(current_execute_data)->opline->op2.var)) { return NULL; } - /* break missing intentionally */ + ZEND_FALLTHROUGH; case IS_NULL: offset_key = ZSTR_EMPTY_ALLOC(); goto str_index; @@ -658,7 +658,7 @@ static zval* ZEND_FASTCALL zend_jit_fetch_dim_w_helper(zend_array *ht, zval *dim if (!zend_jit_undefined_op_helper_write(ht, EG(current_execute_data)->opline->op2.var)) { return NULL; } - /* break missing intentionally */ + ZEND_FALLTHROUGH; case IS_NULL: offset_key = ZSTR_EMPTY_ALLOC(); goto str_index; @@ -717,6 +717,7 @@ try_again: } case IS_UNDEF: zend_jit_undefined_op_helper(EG(current_execute_data)->opline->op2.var); + ZEND_FALLTHROUGH; case IS_DOUBLE: case IS_NULL: case IS_FALSE: diff --git a/ext/opcache/jit/zend_jit_trace.c b/ext/opcache/jit/zend_jit_trace.c index 009b33f6276..46ff31f9c37 100644 --- a/ext/opcache/jit/zend_jit_trace.c +++ b/ext/opcache/jit/zend_jit_trace.c @@ -1517,7 +1517,7 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin if (opline->result_type != IS_UNUSED) { break; } - /* break missing intentionally */ + ZEND_FALLTHROUGH; case ZEND_ASSIGN_DIM: if (opline->op1_type == IS_CV) { ADD_OP1_DATA_TRACE_GUARD(); @@ -1541,7 +1541,7 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin if (opline->result_type != IS_UNUSED) { break; } - /* break missing intentionally */ + ZEND_FALLTHROUGH; case ZEND_ASSIGN_OBJ: case ZEND_PRE_INC_OBJ: case ZEND_PRE_DEC_OBJ: @@ -1578,7 +1578,7 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin case ZEND_CONCAT: case ZEND_FAST_CONCAT: ADD_OP2_TRACE_GUARD(); - /* break missing intentionally */ + ZEND_FALLTHROUGH; case ZEND_ECHO: case ZEND_STRLEN: case ZEND_COUNT: @@ -1645,7 +1645,7 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin /* smart branch */ break; } - /* break missing intentionally */ + ZEND_FALLTHROUGH; case ZEND_JMPZNZ: case ZEND_JMPZ_EX: case ZEND_JMPNZ_EX: @@ -1671,7 +1671,7 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin // TODO: support for empty() ??? break; } - /* break missing intentionally */ + ZEND_FALLTHROUGH; case ZEND_FETCH_DIM_R: case ZEND_FETCH_DIM_IS: case ZEND_FETCH_LIST_R: @@ -1722,7 +1722,7 @@ static zend_ssa *zend_jit_trace_build_tssa(zend_jit_trace_rec *trace_buffer, uin if (opline->op2.num > MAX_ARG_FLAG_NUM) { goto propagate_arg; } - /* break missing intentionally */ + ZEND_FALLTHROUGH; case ZEND_SEND_VAL: case ZEND_SEND_VAR: case ZEND_SEND_VAR_NO_REF: @@ -1815,7 +1815,7 @@ propagate_arg: || !TRACE_FRAME_IS_LAST_SEND_BY_VAL(frame->call)) { break; } - /* break missing intentionally */ + ZEND_FALLTHROUGH; case ZEND_FETCH_OBJ_R: case ZEND_FETCH_OBJ_IS: case ZEND_FETCH_OBJ_W: @@ -4626,7 +4626,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par if (opline->extended_value != op1_type) { break; } - /* break missing intentionally */ + ZEND_FALLTHROUGH; case ZEND_QM_ASSIGN: op1_addr = OP1_REG_ADDR(); if (ra @@ -5022,7 +5022,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par /* smart branch */ break; } - /* break missing intentionally */ + ZEND_FALLTHROUGH; case ZEND_JMPZNZ: case ZEND_JMPZ_EX: case ZEND_JMPNZ_EX: @@ -5167,7 +5167,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par || !TRACE_FRAME_IS_LAST_SEND_BY_VAL(JIT_G(current_frame)->call)) { break; } - /* break missing intentionally */ + ZEND_FALLTHROUGH; case ZEND_FETCH_DIM_R: case ZEND_FETCH_DIM_IS: case ZEND_FETCH_LIST_R: @@ -5365,7 +5365,7 @@ static const void *zend_jit_trace(zend_jit_trace_rec *trace_buffer, uint32_t par || !TRACE_FRAME_IS_LAST_SEND_BY_VAL(JIT_G(current_frame)->call)) { break; } - /* break missing intentionally */ + ZEND_FALLTHROUGH; case ZEND_FETCH_OBJ_R: case ZEND_FETCH_OBJ_IS: case ZEND_FETCH_OBJ_W: diff --git a/ext/opcache/zend_accelerator_blacklist.c b/ext/opcache/zend_accelerator_blacklist.c index df9417db34a..f79625e8a62 100644 --- a/ext/opcache/zend_accelerator_blacklist.c +++ b/ext/opcache/zend_accelerator_blacklist.c @@ -153,7 +153,7 @@ static void zend_accel_blacklist_update_regexp(zend_blacklist *blacklist) case '}': case '\\': *p++ = '\\'; - /* break missing intentionally */ + ZEND_FALLTHROUGH; default: *p++ = *c++; } diff --git a/ext/openssl/xp_ssl.c b/ext/openssl/xp_ssl.c index 9918e0c751f..d7f5ac720f5 100644 --- a/ext/openssl/xp_ssl.c +++ b/ext/openssl/xp_ssl.c @@ -238,8 +238,7 @@ static int php_openssl_handle_ssl_error(php_stream *stream, int nr_bytes, bool i break; } - - /* fall through */ + ZEND_FALLTHROUGH; default: /* some other error */ ecode = ERR_get_error(); @@ -540,6 +539,7 @@ static int php_openssl_apply_peer_verification_policy(SSL *ssl, X509 *peer, php_ break; } /* not allowed, so fall through */ + ZEND_FALLTHROUGH; default: php_error_docref(NULL, E_WARNING, "Could not verify peer: code:%d %s", diff --git a/ext/pdo/pdo_stmt.c b/ext/pdo/pdo_stmt.c index cadfd664b8d..dd3fa4cacf5 100644 --- a/ext/pdo/pdo_stmt.c +++ b/ext/pdo/pdo_stmt.c @@ -1124,7 +1124,7 @@ static bool pdo_stmt_verify_mode(pdo_stmt_t *stmt, zend_long mode, uint32_t mode zend_argument_value_error(mode_arg_num, "cannot be PDO::FETCH_LAZY in PDOStatement::fetchAll()"); return 0; } - /* fall through */ + ZEND_FALLTHROUGH; default: if ((flags & PDO_FETCH_SERIALIZE) == PDO_FETCH_SERIALIZE) { zend_argument_value_error(mode_arg_num, "must use PDO::FETCH_SERIALIZE with PDO::FETCH_CLASS"); @@ -1138,7 +1138,7 @@ static bool pdo_stmt_verify_mode(pdo_stmt_t *stmt, zend_long mode, uint32_t mode zend_argument_value_error(mode_arg_num, "must be a bitmask of PDO::FETCH_* constants"); return 0; } - /* no break; */ + ZEND_FALLTHROUGH; case PDO_FETCH_CLASS: return 1; diff --git a/ext/pdo_firebird/firebird_driver.c b/ext/pdo_firebird/firebird_driver.c index deee7f33f3f..e234c720a4a 100644 --- a/ext/pdo_firebird/firebird_driver.c +++ b/ext/pdo_firebird/firebird_driver.c @@ -429,6 +429,8 @@ int preprocess(const zend_string* sql, char* sql_out, HashTable* named_params) return 1; } } + /* TODO Check this is correct? */ + ZEND_FALLTHROUGH; case ttWhite: case ttComment: @@ -962,6 +964,8 @@ static int firebird_handle_get_attribute(pdo_dbh_t *dbh, zend_long attr, zval *v ZVAL_STRING(val, tmp); return 1; } + /* TODO Check this is correct? */ + ZEND_FALLTHROUGH; case PDO_ATTR_FETCH_TABLE_NAMES: ZVAL_BOOL(val, H->fetch_table_names); diff --git a/ext/pdo_firebird/firebird_statement.c b/ext/pdo_firebird/firebird_statement.c index 7fad08e2ad1..4dbb9e3fa3a 100644 --- a/ext/pdo_firebird/firebird_statement.c +++ b/ext/pdo_firebird/firebird_statement.c @@ -135,6 +135,7 @@ static int firebird_stmt_execute(pdo_stmt_t *stmt) /* {{{ */ } stmt->row_count = affected_rows; } + /* TODO Dead code or assert one of the previous cases are hit? */ default: ; } @@ -685,6 +686,7 @@ static int firebird_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_dat var->sqllen = Z_STRLEN_P(parameter); break; } + ZEND_FALLTHROUGH; case IS_NULL: /* complain if this field doesn't allow NULL values */ if (~var->sqltype & 1) { diff --git a/ext/pdo_pgsql/pgsql_statement.c b/ext/pdo_pgsql/pgsql_statement.c index 6570a86e14d..7f3d57ea1b1 100644 --- a/ext/pdo_pgsql/pgsql_statement.c +++ b/ext/pdo_pgsql/pgsql_statement.c @@ -297,6 +297,7 @@ static int pgsql_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_data * pdo_pgsql_error_stmt_msg(stmt, 0, "HY093", "parameter was not defined"); return 0; } + ZEND_FALLTHROUGH; case PDO_PARAM_EVT_EXEC_POST: case PDO_PARAM_EVT_FETCH_PRE: case PDO_PARAM_EVT_FETCH_POST: diff --git a/ext/pdo_sqlite/sqlite_statement.c b/ext/pdo_sqlite/sqlite_statement.c index 65bdb1de91f..31f71b0089a 100644 --- a/ext/pdo_sqlite/sqlite_statement.c +++ b/ext/pdo_sqlite/sqlite_statement.c @@ -63,6 +63,7 @@ static int pdo_sqlite_stmt_execute(pdo_stmt_t *stmt) case SQLITE_ERROR: sqlite3_reset(S->stmt); + ZEND_FALLTHROUGH; case SQLITE_MISUSE: case SQLITE_BUSY: default: @@ -225,6 +226,7 @@ static int pdo_sqlite_stmt_fetch(pdo_stmt_t *stmt, case SQLITE_ERROR: sqlite3_reset(S->stmt); + ZEND_FALLTHROUGH; default: pdo_sqlite_error_stmt(stmt); return 0; @@ -328,6 +330,8 @@ static int pdo_sqlite_stmt_col_meta(pdo_stmt_t *stmt, zend_long colno, zval *ret case SQLITE_BLOB: add_next_index_string(&flags, "blob"); + /* TODO Check this is correct */ + ZEND_FALLTHROUGH; case SQLITE_TEXT: add_assoc_string(return_value, "native_type", "string"); add_assoc_long(return_value, "pdo_type", PDO_PARAM_STR); diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c index 7faa5af4fe8..41fc5e79cd6 100644 --- a/ext/pgsql/pgsql.c +++ b/ext/pgsql/pgsql.c @@ -4152,6 +4152,7 @@ static int php_pgsql_fd_cast(php_stream *stream, int cast_as, void **ret) /* {{{ *(php_socket_t *)ret = fd_number; return SUCCESS; } + ZEND_FALLTHROUGH; default: return FAILURE; } diff --git a/ext/phar/phar_object.c b/ext/phar/phar_object.c index f67855af18c..f23a9ecb69b 100644 --- a/ext/phar/phar_object.c +++ b/ext/phar/phar_object.c @@ -1485,7 +1485,7 @@ static int phar_build(zend_object_iterator *iter, void *puser) /* {{{ */ goto phar_spl_fileinfo; } } - /* fall-through */ + ZEND_FALLTHROUGH; default: zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0, "Iterator %s returned an invalid value (must return a string)", ZSTR_VAL(ce->name)); return ZEND_HASH_APPLY_STOP; diff --git a/ext/phar/util.c b/ext/phar/util.c index 4011a996ca4..c7b5ddbb767 100644 --- a/ext/phar/util.c +++ b/ext/phar/util.c @@ -1896,6 +1896,7 @@ int phar_create_signature(phar_archive_data *phar, php_stream *fp, char **signat break; default: phar->sig_flags = PHAR_SIG_SHA1; + ZEND_FALLTHROUGH; case PHAR_SIG_SHA1: { unsigned char digest[20]; PHP_SHA1_CTX context; diff --git a/ext/readline/readline_cli.c b/ext/readline/readline_cli.c index b13cd4ea819..fca41e58353 100644 --- a/ext/readline/readline_cli.c +++ b/ext/readline/readline_cli.c @@ -551,12 +551,14 @@ TODO: if (retval) { break; } + ZEND_FALLTHROUGH; case 2: case 3: retval = cli_completion_generator_define(text, textlen, &cli_completion_state, ce ? &ce->constants_table : EG(zend_constants)); if (retval || ce) { break; } + ZEND_FALLTHROUGH; case 4: case 5: retval = cli_completion_generator_class(lc_text, textlen, &cli_completion_state); diff --git a/ext/session/session.c b/ext/session/session.c index 958f17ec816..9f00c045904 100644 --- a/ext/session/session.c +++ b/ext/session/session.c @@ -1527,7 +1527,7 @@ PHPAPI int php_session_start(void) /* {{{ */ } } PS(session_status) = php_session_none; - /* Fall through */ + ZEND_FALLTHROUGH; case php_session_none: default: diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c index dc74967eded..f2cbfd7da00 100644 --- a/ext/simplexml/simplexml.c +++ b/ext/simplexml/simplexml.c @@ -496,7 +496,7 @@ long_dim: value_str = Z_STR(zval_copy); break; } - /* break is missing intentionally */ + ZEND_FALLTHROUGH; default: if (member == &tmp_zv) { zval_ptr_dtor_str(&tmp_zv); diff --git a/ext/soap/php_encoding.c b/ext/soap/php_encoding.c index ddc816744f5..9e4417f7991 100644 --- a/ext/soap/php_encoding.c +++ b/ext/soap/php_encoding.c @@ -1766,6 +1766,8 @@ static sdlTypePtr model_array_element(sdlContentModelPtr model) return model_array_element(tmp); } ZEND_HASH_FOREACH_END(); } + /* TODO Check this is correct */ + ZEND_FALLTHROUGH; case XSD_CONTENT_GROUP: { return model_array_element(model->u.group->model); } diff --git a/ext/soap/php_schema.c b/ext/soap/php_schema.c index c9ee033b146..764caeae3cb 100644 --- a/ext/soap/php_schema.c +++ b/ext/soap/php_schema.c @@ -2207,6 +2207,7 @@ static void schema_content_model_fixup(sdlCtx *ctx, sdlContentModelPtr model) model->max_occurs = 1; } } + ZEND_FALLTHROUGH; case XSD_CONTENT_SEQUENCE: case XSD_CONTENT_ALL: { sdlContentModelPtr tmp; diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c index 83e4f014a1a..ef96c8fb59d 100644 --- a/ext/spl/spl_array.c +++ b/ext/spl/spl_array.c @@ -369,12 +369,14 @@ static zval *spl_array_get_dimension_ptr(int check_inherited, spl_array_object * switch (type) { case BP_VAR_R: zend_error(E_WARNING, "Undefined array key \"%s\"", ZSTR_VAL(key.key)); + ZEND_FALLTHROUGH; case BP_VAR_UNSET: case BP_VAR_IS: retval = &EG(uninitialized_zval); break; case BP_VAR_RW: zend_error(E_WARNING,"Undefined array key \"%s\"", ZSTR_VAL(key.key)); + ZEND_FALLTHROUGH; case BP_VAR_W: { ZVAL_NULL(retval); } @@ -385,12 +387,14 @@ static zval *spl_array_get_dimension_ptr(int check_inherited, spl_array_object * switch (type) { case BP_VAR_R: zend_error(E_WARNING, "Undefined array key \"%s\"", ZSTR_VAL(key.key)); + ZEND_FALLTHROUGH; case BP_VAR_UNSET: case BP_VAR_IS: retval = &EG(uninitialized_zval); break; case BP_VAR_RW: zend_error(E_WARNING,"Undefined array key \"%s\"", ZSTR_VAL(key.key)); + ZEND_FALLTHROUGH; case BP_VAR_W: { zval value; ZVAL_NULL(&value); @@ -404,12 +408,14 @@ static zval *spl_array_get_dimension_ptr(int check_inherited, spl_array_object * switch (type) { case BP_VAR_R: zend_error(E_WARNING, "Undefined array key " ZEND_LONG_FMT, key.h); + ZEND_FALLTHROUGH; case BP_VAR_UNSET: case BP_VAR_IS: retval = &EG(uninitialized_zval); break; case BP_VAR_RW: zend_error(E_WARNING, "Undefined array key " ZEND_LONG_FMT, key.h); + ZEND_FALLTHROUGH; case BP_VAR_W: { zval value; ZVAL_NULL(&value); diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c index 4a2779f90cb..212383cbcc2 100644 --- a/ext/spl/spl_directory.c +++ b/ext/spl/spl_directory.c @@ -2335,21 +2335,21 @@ PHP_METHOD(SplFileObject, fgetcsv) } else { escape = (unsigned char) esc[0]; } - /* no break */ + ZEND_FALLTHROUGH; case 2: if (e_len != 1) { zend_argument_value_error(2, "must be a single character"); RETURN_THROWS(); } enclosure = enclo[0]; - /* no break */ + ZEND_FALLTHROUGH; case 1: if (d_len != 1) { zend_argument_value_error(1, "must be a single character"); RETURN_THROWS(); } delimiter = delim[0]; - /* no break */ + ZEND_FALLTHROUGH; case 0: break; } @@ -2387,21 +2387,21 @@ PHP_METHOD(SplFileObject, fputcsv) zend_argument_value_error(4, "must be empty or a single character"); RETURN_THROWS(); } - /* no break */ + ZEND_FALLTHROUGH; case 3: if (e_len != 1) { zend_argument_value_error(3, "must be a single character"); RETURN_THROWS(); } enclosure = enclo[0]; - /* no break */ + ZEND_FALLTHROUGH; case 2: if (d_len != 1) { zend_argument_value_error(2, "must be a single character"); RETURN_THROWS(); } delimiter = delim[0]; - /* no break */ + ZEND_FALLTHROUGH; case 1: case 0: break; @@ -2440,21 +2440,21 @@ PHP_METHOD(SplFileObject, setCsvControl) zend_argument_value_error(3, "must be empty or a single character"); RETURN_THROWS(); } - /* no break */ + ZEND_FALLTHROUGH; case 2: if (e_len != 1) { zend_argument_value_error(2, "must be a single character"); RETURN_THROWS(); } enclosure = enclo[0]; - /* no break */ + ZEND_FALLTHROUGH; case 1: if (d_len != 1) { zend_argument_value_error(1, "must be a single character"); RETURN_THROWS(); } delimiter = delim[0]; - /* no break */ + ZEND_FALLTHROUGH; case 0: break; } diff --git a/ext/spl/spl_iterators.c b/ext/spl/spl_iterators.c index 051b96bf9fb..0b6ed31c54c 100644 --- a/ext/spl/spl_iterators.c +++ b/ext/spl/spl_iterators.c @@ -244,13 +244,15 @@ next_step: zend_clear_exception(); } } - /* fall through */ + ZEND_FALLTHROUGH; case RS_START: if (iterator->funcs->valid(iterator) == FAILURE) { break; } object->iterators[object->level].state = RS_TEST; /* break; */ + /* TODO: Check this is correct */ + ZEND_FALLTHROUGH; case RS_TEST: if (object->callHasChildren) { zend_call_method_with_0_params(Z_OBJ_P(zthis), object->ce, &object->callHasChildren, "callHasChildren", &retval); diff --git a/ext/sqlite3/sqlite3.c b/ext/sqlite3/sqlite3.c index 1db9841252b..fc4c67273e6 100644 --- a/ext/sqlite3/sqlite3.c +++ b/ext/sqlite3/sqlite3.c @@ -1810,7 +1810,7 @@ PHP_METHOD(SQLite3Stmt, execute) } case SQLITE_ERROR: sqlite3_reset(stmt_obj->stmt); - + ZEND_FALLTHROUGH; default: if (!EG(exception)) { php_sqlite3_error(stmt_obj->db_obj, "Unable to execute statement: %s", sqlite3_errmsg(sqlite3_db_handle(stmt_obj->stmt))); diff --git a/ext/standard/array.c b/ext/standard/array.c index e0b52ca1692..54c08b3c970 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -721,7 +721,7 @@ PHP_FUNCTION(count) return; } } - /* fallthrough */ + ZEND_FALLTHROUGH; default: zend_argument_type_error(1, "must be of type Countable|array, %s given", zend_zval_type_name(array)); RETURN_THROWS(); diff --git a/ext/standard/dns.c b/ext/standard/dns.c index 105e0f0f263..392bb97585d 100644 --- a/ext/standard/dns.c +++ b/ext/standard/dns.c @@ -497,17 +497,17 @@ static u_char *php_parserr(u_char *cp, u_char *end, querybuf *answer, int type_t add_assoc_string(subarray, "type", "MX"); GETSHORT(n, cp); add_assoc_long(subarray, "pri", n); - /* no break; */ + ZEND_FALLTHROUGH; case DNS_T_CNAME: if (type == DNS_T_CNAME) { add_assoc_string(subarray, "type", "CNAME"); } - /* no break; */ + ZEND_FALLTHROUGH; case DNS_T_NS: if (type == DNS_T_NS) { add_assoc_string(subarray, "type", "NS"); } - /* no break; */ + ZEND_FALLTHROUGH; case DNS_T_PTR: if (type == DNS_T_PTR) { add_assoc_string(subarray, "type", "PTR"); diff --git a/ext/standard/exec.c b/ext/standard/exec.c index 00f5d5f9ff1..ab5a025152d 100644 --- a/ext/standard/exec.c +++ b/ext/standard/exec.c @@ -358,7 +358,7 @@ PHPAPI zend_string *php_escape_shell_cmd(const char *str) #else ZSTR_VAL(cmd)[y++] = '\\'; #endif - /* fall-through */ + ZEND_FALLTHROUGH; default: ZSTR_VAL(cmd)[y++] = str[x]; @@ -432,7 +432,7 @@ PHPAPI zend_string *php_escape_shell_arg(const char *str) ZSTR_VAL(cmd)[y++] = '\\'; ZSTR_VAL(cmd)[y++] = '\''; #endif - /* fall-through */ + ZEND_FALLTHROUGH; default: ZSTR_VAL(cmd)[y++] = str[x]; } diff --git a/ext/standard/file.c b/ext/standard/file.c index 2f1c6576233..b5bbf287084 100644 --- a/ext/standard/file.c +++ b/ext/standard/file.c @@ -651,7 +651,7 @@ PHP_FUNCTION(file_put_contents) case IS_FALSE: case IS_TRUE: convert_to_string(data); - + ZEND_FALLTHROUGH; case IS_STRING: if (Z_STRLEN_P(data)) { numbytes = php_stream_write(stream, Z_STRVAL_P(data), Z_STRLEN_P(data)); @@ -699,6 +699,7 @@ PHP_FUNCTION(file_put_contents) break; } } + ZEND_FALLTHROUGH; default: numbytes = -1; break; @@ -1774,7 +1775,7 @@ quit_loop: if (last_chars[0] == '\r') { return ptr - 2; } - /* break is omitted intentionally */ + ZEND_FALLTHROUGH; case '\r': return ptr - 1; } @@ -2080,7 +2081,7 @@ PHPAPI void php_fgetcsv(php_stream *stream, char delimiter, char enclosure, int memcpy(tptr, hunk_begin, bptr - hunk_begin); tptr += (bptr - hunk_begin); hunk_begin = bptr; - /* break is omitted intentionally */ + ZEND_FALLTHROUGH; case 0: { char *new_buf; @@ -2132,7 +2133,7 @@ PHPAPI void php_fgetcsv(php_stream *stream, char delimiter, char enclosure, int case -2: case -1: php_mb_reset(); - /* break is omitted intentionally */ + ZEND_FALLTHROUGH; case 1: /* we need to determine if the enclosure is * 'real' or is it escaped */ @@ -2201,7 +2202,7 @@ PHPAPI void php_fgetcsv(php_stream *stream, char delimiter, char enclosure, int case -1: inc_len = 1; php_mb_reset(); - /* break is omitted intentionally */ + ZEND_FALLTHROUGH; case 1: if (*bptr == delimiter) { goto quit_loop_3; @@ -2232,7 +2233,7 @@ PHPAPI void php_fgetcsv(php_stream *stream, char delimiter, char enclosure, int case -1: inc_len = 1; php_mb_reset(); - /* break is omitted intentionally */ + ZEND_FALLTHROUGH; case 1: if (*bptr == delimiter) { goto quit_loop_4; diff --git a/ext/standard/filters.c b/ext/standard/filters.c index d5e65644439..466d3525237 100644 --- a/ext/standard/filters.c +++ b/ext/standard/filters.c @@ -951,7 +951,7 @@ static php_conv_err_t php_conv_qprint_decode_convert(php_conv_qprint_decode *ins ps++, icnt--; break; } - } /* break is missing intentionally */ + } ZEND_FALLTHROUGH; case 2: { if (icnt == 0) { @@ -968,7 +968,7 @@ static php_conv_err_t php_conv_qprint_decode_convert(php_conv_qprint_decode *ins if (scan_stat != 3) { break; } - } /* break is missing intentionally */ + } ZEND_FALLTHROUGH; case 3: { if (ocnt < 1) { @@ -1763,6 +1763,8 @@ static size_t php_dechunk(char *buf, size_t len, php_chunked_filter_data *data) if (p == end) { return out_len; } + /* TODO: Check if Intentional? */ + ZEND_FALLTHROUGH; case CHUNK_SIZE_CR: if (*p == '\r') { p++; @@ -1771,6 +1773,8 @@ static size_t php_dechunk(char *buf, size_t len, php_chunked_filter_data *data) return out_len; } } + /* TODO: Check if Intentional? */ + ZEND_FALLTHROUGH; case CHUNK_SIZE_LF: if (*p == '\n') { p++; @@ -1786,6 +1790,8 @@ static size_t php_dechunk(char *buf, size_t len, php_chunked_filter_data *data) data->state = CHUNK_ERROR; continue; } + /* TODO: Check if Intentional? */ + ZEND_FALLTHROUGH; case CHUNK_BODY: if ((size_t) (end - p) >= data->chunk_size) { if (p != out) { @@ -1807,6 +1813,8 @@ static size_t php_dechunk(char *buf, size_t len, php_chunked_filter_data *data) out_len += end - p; return out_len; } + /* TODO: Check if Intentional? */ + ZEND_FALLTHROUGH; case CHUNK_BODY_CR: if (*p == '\r') { p++; @@ -1815,6 +1823,8 @@ static size_t php_dechunk(char *buf, size_t len, php_chunked_filter_data *data) return out_len; } } + /* TODO: Check if Intentional? */ + ZEND_FALLTHROUGH; case CHUNK_BODY_LF: if (*p == '\n') { p++; diff --git a/ext/standard/formatted_print.c b/ext/standard/formatted_print.c index ab205feb6fa..bd0e668fca7 100644 --- a/ext/standard/formatted_print.c +++ b/ext/standard/formatted_print.c @@ -704,7 +704,7 @@ php_formatted_print(char *format, size_t format_len, zval *args, int argc, int n zend_value_error("Missing format specifier at end of string"); goto fail; } - /* break missing intentionally */ + ZEND_FALLTHROUGH; default: zend_value_error("Unknown format specifier \"%c\"", *format); diff --git a/ext/standard/head.c b/ext/standard/head.c index 19ed36c52cb..fa21086878d 100644 --- a/ext/standard/head.c +++ b/ext/standard/head.c @@ -313,6 +313,7 @@ PHP_FUNCTION(headers_sent) switch(ZEND_NUM_ARGS()) { case 2: ZEND_TRY_ASSIGN_REF_LONG(arg2, line); + ZEND_FALLTHROUGH; case 1: if (file) { ZEND_TRY_ASSIGN_REF_STRING(arg1, file); diff --git a/ext/standard/math.c b/ext/standard/math.c index c10dea9a387..58ec405553c 100644 --- a/ext/standard/math.c +++ b/ext/standard/math.c @@ -300,7 +300,7 @@ PHP_FUNCTION(round) if (places >= 0) { RETURN_DOUBLE((double) Z_LVAL_P(value)); } - /* break omitted intentionally */ + ZEND_FALLTHROUGH; case IS_DOUBLE: return_val = (Z_TYPE_P(value) == IS_LONG) ? (double)Z_LVAL_P(value) : Z_DVAL_P(value); @@ -773,7 +773,7 @@ PHPAPI void _php_math_basetozval(zend_string *str, int base, zval *ret) fnum = (double)num; mode = 1; } - /* fall-through */ + ZEND_FALLTHROUGH; case 1: /* Float */ fnum = fnum * base + c; } diff --git a/ext/standard/net.c b/ext/standard/net.c index 2700c7b2439..79d17c1a6f1 100644 --- a/ext/standard/net.c +++ b/ext/standard/net.c @@ -77,7 +77,7 @@ PHPAPI zend_string* php_inet_ntop(const struct sockaddr *addr) { #ifdef AF_INET6 case AF_INET6: addrlen = sizeof(struct sockaddr_in6); - /* fallthrough */ + ZEND_FALLTHROUGH; #endif case AF_INET: { zend_string *ret = zend_string_alloc(NI_MAXHOST, 0); diff --git a/ext/standard/string.c b/ext/standard/string.c index cdd86329ee9..1db799c431e 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -2556,7 +2556,7 @@ PHP_FUNCTION(quotemeta) case '(': case ')': *q++ = '\\'; - /* break is missing _intentionally_ */ + ZEND_FALLTHROUGH; default: *q++ = c; } @@ -3545,7 +3545,7 @@ PHPAPI void php_stripcslashes(zend_string *str) *target++=(char)strtol(numtmp, NULL, 16); break; } - /* break is left intentionally */ + ZEND_FALLTHROUGH; default: i=0; while (source < end && *source >= '0' && *source <= '7' && i<3) { @@ -3812,7 +3812,7 @@ do_escape: case '\"': case '\\': *target++ = '\\'; - /* break is missing *intentionally* */ + ZEND_FALLTHROUGH; default: *target++ = *source; break; @@ -3953,7 +3953,7 @@ do_escape: case '\"': case '\\': *target++ = '\\'; - /* break is missing *intentionally* */ + ZEND_FALLTHROUGH; default: *target++ = *source; break; @@ -4574,7 +4574,7 @@ PHP_FUNCTION(nl2br) if ((*tmp == '\r' && *(tmp+1) == '\n') || (*tmp == '\n' && *(tmp+1) == '\r')) { *target++ = *tmp++; } - /* lack of a break; is intentional */ + ZEND_FALLTHROUGH; default: *target++ = *tmp; } diff --git a/ext/zlib/zlib.c b/ext/zlib/zlib.c index b3016abe054..0567dce386e 100644 --- a/ext/zlib/zlib.c +++ b/ext/zlib/zlib.c @@ -231,6 +231,7 @@ static int php_zlib_output_handler_ex(php_zlib_context *ctx, php_output_context deflateEnd(&ctx->Z); return FAILURE; } + ZEND_FALLTHROUGH; case Z_STREAM_END: if (ctx->Z.avail_in) { memmove(ctx->buffer.data, ctx->buffer.data + ctx->buffer.used - ctx->Z.avail_in, ctx->Z.avail_in); @@ -366,7 +367,7 @@ static void php_zlib_output_compression_start(void) break; case 1: ZLIBG(output_compression) = PHP_OUTPUT_HANDLER_DEFAULT_SIZE; - /* break omitted intentionally */ + ZEND_FALLTHROUGH; default: if ( php_zlib_output_encoding() && (h = php_zlib_output_handler_init(ZEND_STRL(PHP_ZLIB_OUTPUT_HANDLER_NAME), ZLIBG(output_compression), PHP_OUTPUT_HANDLER_STDFLAGS)) && diff --git a/main/main.c b/main/main.c index 881ae6e642d..a3f5bc581b2 100644 --- a/main/main.c +++ b/main/main.c @@ -1318,7 +1318,7 @@ static ZEND_COLD void php_error_cb(int orig_type, const char *error_filename, co /* bad error in module startup - no way we can live with this */ exit(-2); } - /* no break - intentionally */ + ZEND_FALLTHROUGH; case E_ERROR: case E_RECOVERABLE_ERROR: case E_PARSE: diff --git a/main/output.c b/main/output.c index ec844973c54..4db908716e2 100644 --- a/main/output.c +++ b/main/output.c @@ -494,6 +494,7 @@ PHPAPI php_output_handler *php_output_handler_create_user(zval *output_handler, handler = alias(Z_STRVAL_P(output_handler), Z_STRLEN_P(output_handler), chunk_size, flags); break; } + ZEND_FALLTHROUGH; default: user = ecalloc(1, sizeof(php_output_handler_user_func_t)); if (SUCCESS == zend_fcall_info_init(output_handler, 0, &user->fci, &user->fcc, &handler_name, &error)) { @@ -1023,7 +1024,7 @@ static inline php_output_handler_status_t php_output_handler_op(php_output_handl case PHP_OUTPUT_HANDLER_NO_DATA: /* handler ate all */ php_output_context_reset(context); - /* no break */ + ZEND_FALLTHROUGH; case PHP_OUTPUT_HANDLER_SUCCESS: /* no more buffered data */ handler->buffer.used = 0; diff --git a/main/snprintf.c b/main/snprintf.c index 581cac1d3bd..d9ce1f7d4c3 100644 --- a/main/snprintf.c +++ b/main/snprintf.c @@ -749,6 +749,7 @@ static int format_converter(register buffy * odp, const char *fmt, va_list ap) / fmt++; } /* these are promoted to int, so no break */ + ZEND_FALLTHROUGH; default: modifier = LM_STD; break; @@ -815,6 +816,7 @@ static int format_converter(register buffy * odp, const char *fmt, va_list ap) / * The rest also applies to other integer formats, so fall * into that case. */ + ZEND_FALLTHROUGH; case 'd': case 'i': /* @@ -1143,6 +1145,7 @@ fmt_error: * Note that we can't point s inside fmt because the * unknown could be preceded by width etc. */ + ZEND_FALLTHROUGH; default: char_buf[0] = '%'; char_buf[1] = *fmt; diff --git a/main/spprintf.c b/main/spprintf.c index 980294ea231..fc2511c7713 100644 --- a/main/spprintf.c +++ b/main/spprintf.c @@ -356,6 +356,7 @@ static void xbuf_format_converter(void *xbuf, bool is_char, const char *fmt, va_ fmt++; } /* these are promoted to int, so no break */ + ZEND_FALLTHROUGH; default: modifier = LM_STD; break; @@ -422,6 +423,7 @@ static void xbuf_format_converter(void *xbuf, bool is_char, const char *fmt, va_ * The rest also applies to other integer formats, so fall * into that case. */ + ZEND_FALLTHROUGH; case 'd': case 'i': /* @@ -749,6 +751,7 @@ fmt_error: * Note that we can't point s inside fmt because the * unknown could be preceded by width etc. */ + ZEND_FALLTHROUGH; default: char_buf[0] = '%'; char_buf[1] = *fmt; diff --git a/main/streams/plain_wrapper.c b/main/streams/plain_wrapper.c index 58b5b64e0e9..50ea4da9c43 100644 --- a/main/streams/plain_wrapper.c +++ b/main/streams/plain_wrapper.c @@ -1075,7 +1075,7 @@ PHPAPI php_stream *_php_stream_fopen(const char *filename, const char *mode, zen //TODO: avoid reallocation??? *opened_path = zend_string_init(realpath, strlen(realpath), 0); } - /* fall through */ + ZEND_FALLTHROUGH; case PHP_STREAM_PERSISTENT_FAILURE: efree(persistent_id); diff --git a/sapi/cli/php_cli_server.c b/sapi/cli/php_cli_server.c index 6511e08c9af..cb993b5bb60 100644 --- a/sapi/cli/php_cli_server.c +++ b/sapi/cli/php_cli_server.c @@ -1627,7 +1627,7 @@ static int php_cli_server_client_read_request_on_header_field(php_http_parser *p switch (client->last_header_element) { case HEADER_VALUE: php_cli_server_client_save_header(client); - /* break missing intentionally */ + ZEND_FALLTHROUGH; case HEADER_NONE: client->current_header_name = (char *)at; client->current_header_name_len = length; @@ -1692,7 +1692,7 @@ static int php_cli_server_client_read_request_on_headers_complete(php_http_parse client->current_header_value = pemalloc(1, 1); *client->current_header_value = '\0'; client->current_header_value_len = 0; - /* break missing intentionally */ + ZEND_FALLTHROUGH; case HEADER_VALUE: php_cli_server_client_save_header(client); break; diff --git a/sapi/fpm/fpm/fpm_conf.c b/sapi/fpm/fpm/fpm_conf.c index 72772031e42..a40b165aed8 100644 --- a/sapi/fpm/fpm/fpm_conf.c +++ b/sapi/fpm/fpm/fpm_conf.c @@ -308,6 +308,7 @@ static char *fpm_conf_set_time(zval *value, void **config, intptr_t offset) /* { case 's' : /* s is the default suffix */ val[len-1] = '\0'; suffix = '0'; + ZEND_FALLTHROUGH; default : if (suffix < '0' || suffix > '9') { return "unknown suffix used in time value"; diff --git a/sapi/fpm/fpm/fpm_process_ctl.c b/sapi/fpm/fpm/fpm_process_ctl.c index d8c0bc30d1a..2806d2a167f 100644 --- a/sapi/fpm/fpm/fpm_process_ctl.c +++ b/sapi/fpm/fpm/fpm_process_ctl.c @@ -217,21 +217,24 @@ void fpm_pctl(int new_state, int action) /* {{{ */ case FPM_PCTL_STATE_RELOADING : /* 'reloading' can be overridden by 'finishing' */ if (new_state == FPM_PCTL_STATE_FINISHING) break; + ZEND_FALLTHROUGH; case FPM_PCTL_STATE_FINISHING : /* 'reloading' and 'finishing' can be overridden by 'terminating' */ if (new_state == FPM_PCTL_STATE_TERMINATING) break; + ZEND_FALLTHROUGH; case FPM_PCTL_STATE_TERMINATING : /* nothing can override 'terminating' state */ zlog(ZLOG_DEBUG, "not switching to '%s' state, because already in '%s' state", fpm_state_names[new_state], fpm_state_names[fpm_state]); return; + /* TODO Add EMPTY_SWITCH_DEFAULT_CASE? */ } fpm_signal_sent = 0; fpm_state = new_state; zlog(ZLOG_DEBUG, "switching to '%s' state", fpm_state_names[fpm_state]); - /* fall down */ + ZEND_FALLTHROUGH; case FPM_PCTL_ACTION_TIMEOUT : fpm_pctl_action_next(); diff --git a/sapi/phpdbg/phpdbg_cmd.c b/sapi/phpdbg/phpdbg_cmd.c index c462c14025a..bdcb3356bca 100644 --- a/sapi/phpdbg/phpdbg_cmd.c +++ b/sapi/phpdbg/phpdbg_cmd.c @@ -258,7 +258,7 @@ PHPDBG_API bool phpdbg_match_param(const phpdbg_param_t *l, const phpdbg_param_t if (l->num != r->num) { break; } - /* break intentionally omitted */ + ZEND_FALLTHROUGH; case STR_PARAM: return (l->len == r->len) && @@ -288,7 +288,7 @@ PHPDBG_API bool phpdbg_match_param(const phpdbg_param_t *l, const phpdbg_param_t if (l->num != r->num) { break; } - /* break intentionally omitted */ + ZEND_FALLTHROUGH; case METHOD_PARAM: { size_t lengths[2] = { diff --git a/sapi/phpdbg/phpdbg_out.c b/sapi/phpdbg/phpdbg_out.c index 581ec0ca4ee..f698f262841 100644 --- a/sapi/phpdbg/phpdbg_out.c +++ b/sapi/phpdbg/phpdbg_out.c @@ -305,6 +305,7 @@ static int format_converter(register buffy *odp, const char *fmt, bool escape_xm fmt++; } /* these are promoted to int, so no break */ + ZEND_FALLTHROUGH; default: modifier = LM_STD; break; @@ -367,6 +368,7 @@ static int format_converter(register buffy *odp, const char *fmt, bool escape_xm * The rest also applies to other integer formats, so fall * into that case. */ + ZEND_FALLTHROUGH; case 'd': case 'i': /* @@ -755,6 +757,7 @@ fmt_error: * Note that we can't point s inside fmt because the * unknown could be preceded by width etc. */ + ZEND_FALLTHROUGH; default: char_buf[0] = '%'; char_buf[1] = *fmt; diff --git a/sapi/phpdbg/phpdbg_watch.c b/sapi/phpdbg/phpdbg_watch.c index 0968aadafa9..048f2fc7eac 100644 --- a/sapi/phpdbg/phpdbg_watch.c +++ b/sapi/phpdbg/phpdbg_watch.c @@ -133,6 +133,8 @@ bool phpdbg_check_watch_diff(phpdbg_watchtype type, void *oldPtr, void *newPtr) if (memcmp(&((Bucket *) oldPtr)->h, &((Bucket *) newPtr)->h, sizeof(Bucket) - sizeof(zval) /* key/val comparison */) != 0) { return 2; } + /* TODO: Is this intentional? */ + ZEND_FALLTHROUGH; case WATCH_ON_ZVAL: return memcmp(oldPtr, newPtr, sizeof(zend_value) + sizeof(uint32_t) /* value + typeinfo */) != 0; case WATCH_ON_HASHTABLE: