From e23073f1aeddc0904393aff712afb12cef47e6af Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Tue, 22 Jan 2013 22:40:47 +0300 Subject: [PATCH] missing break: only print one message per switch statement It prints basically the same message over and over. Fix that. Signed-off-by: Dan Carpenter --- check_missing_break.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/check_missing_break.c b/check_missing_break.c index 2ef4446d..0744ede9 100644 --- a/check_missing_break.c +++ b/check_missing_break.c @@ -53,6 +53,20 @@ static struct smatch_state *alloc_my_state(struct expression *expr) return state; } +struct expression *last_print_expr; +static void print_missing_break(struct expression *expr) +{ + char *name; + + if (get_switch_expr() == last_print_expr) + return; + last_print_expr = get_switch_expr(); + + name = expr_to_str(expr); + sm_msg("warn: missing break? reassigning '%s'", name); + free_string(name); +} + static void match_assign(struct expression *expr) { struct expression *left; @@ -62,13 +76,8 @@ static void match_assign(struct expression *expr) if (!get_switch_expr()) return; left = strip_expr(expr->left); - if (get_state_expr(my_id, left) == &no_break) { - char *name; - - name = expr_to_str(left); - sm_msg("warn: missing break? reassigning '%s'", name); - free_string(name); - } + if (get_state_expr(my_id, left) == &no_break) + print_missing_break(left); set_state_expr(my_id, left, alloc_my_state(get_switch_expr())); skip_this = left; -- 2.11.4.GIT