From d4d6980a4bb5db5188b919db03cf16e7d07ec795 Mon Sep 17 00:00:00 2001 From: dsl Date: Fri, 25 Jul 2008 18:33:53 +0000 Subject: [PATCH] Add a check for 'continue' inside a 'do ... while (0)' loop. 'continue' has the same effect as 'break' - as that probably isn't what the writer had in mind! --- usr.bin/xlint/lint1/err.c | 5 +++-- usr.bin/xlint/lint1/func.c | 6 ++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/usr.bin/xlint/lint1/err.c b/usr.bin/xlint/lint1/err.c index af53320e6625b..8756ede66cff4 100644 --- a/usr.bin/xlint/lint1/err.c +++ b/usr.bin/xlint/lint1/err.c @@ -1,4 +1,4 @@ -/* $NetBSD: err.c,v 1.36 2008/04/27 01:45:04 christos Exp $ */ +/* $NetBSD: err.c,v 1.37 2008/07/25 18:33:53 dsl Exp $ */ /* * Copyright (c) 1994, 1995 Jochen Pohl @@ -37,7 +37,7 @@ #include #if defined(__RCSID) && !defined(lint) -__RCSID("$NetBSD: err.c,v 1.36 2008/04/27 01:45:04 christos Exp $"); +__RCSID("$NetBSD: err.c,v 1.37 2008/07/25 18:33:53 dsl Exp $"); #endif #include @@ -382,6 +382,7 @@ const char *msgs[] = { "({ }) is a GCC extension", /* 320 */ "array initializer with designators is a C9X feature", /* 321 */ "zero sized array is a C99 extension", /* 322 */ + "continue in 'do ... while (0)' loop", /* 323 */ }; /* diff --git a/usr.bin/xlint/lint1/func.c b/usr.bin/xlint/lint1/func.c index 23fbc146ce3ed..319f41ed5c2d2 100644 --- a/usr.bin/xlint/lint1/func.c +++ b/usr.bin/xlint/lint1/func.c @@ -1,4 +1,4 @@ -/* $NetBSD: func.c,v 1.22 2005/09/24 15:30:35 perry Exp $ */ +/* $NetBSD: func.c,v 1.23 2008/07/25 18:33:53 dsl Exp $ */ /* * Copyright (c) 1994, 1995 Jochen Pohl @@ -37,7 +37,7 @@ #include #if defined(__RCSID) && !defined(lint) -__RCSID("$NetBSD: func.c,v 1.22 2005/09/24 15:30:35 perry Exp $"); +__RCSID("$NetBSD: func.c,v 1.23 2008/07/25 18:33:53 dsl Exp $"); #endif #include @@ -774,6 +774,8 @@ do2(tnode_t *tn) } else { cstk->c_infinite = tn->tn_val->v_ldbl != 0.0; } + if (!cstk->c_infinite && cstk->c_cont) + error(323); } expr(tn, 0, 1, 1);