From d59fced21b0c94a4a41f0213f62120dbe0f9b710 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 13 May 2020 23:33:03 +0100 Subject: #591 Improve type switch statement error for `fallthrough` --- src/check_stmt.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/check_stmt.cpp') diff --git a/src/check_stmt.cpp b/src/check_stmt.cpp index 3e84db279..92155cc5e 100644 --- a/src/check_stmt.cpp +++ b/src/check_stmt.cpp @@ -1025,7 +1025,7 @@ void check_type_switch_stmt(CheckerContext *ctx, Ast *node, u32 mod_flags) { ast_node(ss, TypeSwitchStmt, node); Operand x = {}; - mod_flags |= Stmt_BreakAllowed; + mod_flags |= Stmt_BreakAllowed | Stmt_TypeSwitch; check_open_scope(ctx, node); defer (check_close_scope(ctx)); @@ -1791,7 +1791,11 @@ void check_stmt_internal(CheckerContext *ctx, Ast *node, u32 flags) { break; case Token_fallthrough: if ((flags & Stmt_FallthroughAllowed) == 0) { - error(token, "'fallthrough' statement in illegal position, expected at the end of a 'case' block"); + if ((flags & Stmt_TypeSwitch) != 0) { + error(token, "'fallthrough' statement not allowed within a type switch statement"); + } else { + error(token, "'fallthrough' statement in illegal position, expected at the end of a 'case' block"); + } } else if (bs->label != nullptr) { error(token, "'fallthrough' cannot have a label"); } -- cgit v1.2.3