Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.bin/xlint/lint1 lint: reduce verbosity of assertions



details:   https://anonhg.NetBSD.org/src/rev/46de4bfe3307
branches:  trunk
changeset: 948730:46de4bfe3307
user:      rillig <rillig%NetBSD.org@localhost>
date:      Wed Dec 30 01:33:30 2020 +0000

description:
lint: reduce verbosity of assertions

Having 2 lines of source code per assertion is too much, especially
since most of this code is redundant anyway.  Extract the common code
and the additional negation into a simple function instead.

diffstat:

 usr.bin/xlint/lint1/err.c      |  16 ++++++++++++++--
 usr.bin/xlint/lint1/externs1.h |   4 +++-
 usr.bin/xlint/lint1/init.c     |  32 ++++++++++++--------------------
 usr.bin/xlint/lint1/lint1.h    |   8 +++++++-
 4 files changed, 36 insertions(+), 24 deletions(-)

diffs (166 lines):

diff -r 99a57299550b -r 46de4bfe3307 usr.bin/xlint/lint1/err.c
--- a/usr.bin/xlint/lint1/err.c Wed Dec 30 01:02:38 2020 +0000
+++ b/usr.bin/xlint/lint1/err.c Wed Dec 30 01:33:30 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: err.c,v 1.58 2020/12/29 12:18:42 rillig Exp $  */
+/*     $NetBSD: err.c,v 1.59 2020/12/30 01:33:30 rillig Exp $  */
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: err.c,v 1.58 2020/12/29 12:18:42 rillig Exp $");
+__RCSID("$NetBSD: err.c,v 1.59 2020/12/30 01:33:30 rillig Exp $");
 #endif
 
 #include <sys/types.h>
@@ -490,6 +490,18 @@
 }
 
 void
+assert_failed(const char *file, int line, const char *func, const char *cond)
+{
+       const   char *fn;
+
+       fn = lbasename(curr_pos.p_file);
+       (void)fprintf(stderr,
+           "lint: assertion \"%s\" failed in %s at %s:%d near %s:%d\n",
+           cond, func, file, line, fn, curr_pos.p_line);
+       abort();
+}
+
+void
 warning(int n, ...)
 {
        va_list ap;
diff -r 99a57299550b -r 46de4bfe3307 usr.bin/xlint/lint1/externs1.h
--- a/usr.bin/xlint/lint1/externs1.h    Wed Dec 30 01:02:38 2020 +0000
+++ b/usr.bin/xlint/lint1/externs1.h    Wed Dec 30 01:33:30 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: externs1.h,v 1.40 2020/12/29 17:29:31 rillig Exp $     */
+/*     $NetBSD: externs1.h,v 1.41 2020/12/30 01:33:30 rillig Exp $     */
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -127,6 +127,8 @@
 extern int     c99ism(int, ...);
 extern void    lerror(const char *, int, const char *, ...)
      __attribute__((__noreturn__,__format__(__printf__, 3, 4)));
+extern void    assert_failed(const char *, int, const char *, const char *)
+               __attribute__((__noreturn__));
 
 /*
  * decl.c
diff -r 99a57299550b -r 46de4bfe3307 usr.bin/xlint/lint1/init.c
--- a/usr.bin/xlint/lint1/init.c        Wed Dec 30 01:02:38 2020 +0000
+++ b/usr.bin/xlint/lint1/init.c        Wed Dec 30 01:33:30 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: init.c,v 1.43 2020/12/29 23:12:48 rillig Exp $ */
+/*     $NetBSD: init.c,v 1.44 2020/12/30 01:33:30 rillig Exp $ */
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: init.c,v 1.43 2020/12/29 23:12:48 rillig Exp $");
+__RCSID("$NetBSD: init.c,v 1.44 2020/12/30 01:33:30 rillig Exp $");
 #endif
 
 #include <ctype.h>
@@ -161,16 +161,14 @@
        initstk = istk->i_nxt;
        free(istk);
        istk = initstk;
-       if (istk == NULL)
-               LERROR("initstack_pop_item()");
+       lint_assert(istk != NULL);
 
        DPRINTF(("%s: top type=%s, brace=%d remaining=%d named=%d\n", __func__,
            tyname(buf, sizeof buf, istk->i_type ? istk->i_type : istk->i_subt),
            istk->i_brace, istk->i_remaining, istk->i_namedmem));
 
        istk->i_remaining--;
-       if (istk->i_remaining < 0)
-               LERROR("initstack_pop_item()");
+       lint_assert(istk->i_remaining >= 0);
 
        DPRINTF(("%s: top remaining=%d rhs.name=%s\n", __func__,
            istk->i_remaining, namedmem ? namedmem->n_name : "*null*"));
@@ -207,8 +205,7 @@
            !istk->i_namedmem) {
                do {
                        m = istk->i_mem = istk->i_mem->s_nxt;
-                       if (m == NULL)
-                               LERROR("initstack_pop_item()");
+                       lint_assert(m != NULL);
                        DPRINTF(("%s: pop %s\n", __func__, m->s_name));
                } while (m->s_field && m->s_name == unnamed);
                istk->i_subt = m->s_type;
@@ -268,25 +265,21 @@
                 * Inside of other aggregate types must not be an incomplete
                 * type.
                 */
-               if (istk->i_nxt->i_nxt != NULL)
-                       LERROR("initstack_push()");
+               lint_assert(istk->i_nxt->i_nxt == NULL);
                istk->i_remaining = 1;
-               if (istk->i_type->t_tspec != ARRAY)
-                       LERROR("initstack_push()");
+               lint_assert(istk->i_type->t_tspec == ARRAY);
                istk->i_type->t_dim++;
                setcomplete(istk->i_type, 1);
        }
 
-       if (istk->i_remaining <= 0)
-               LERROR("initstack_push()");
-       if (istk->i_type != NULL && tspec_is_scalar(istk->i_type->t_tspec))
-               LERROR("initstack_push()");
+       lint_assert(istk->i_remaining > 0);
+       lint_assert(istk->i_type == NULL ||
+           !tspec_is_scalar(istk->i_type->t_tspec));
 
        initstk = xcalloc(1, sizeof (istk_t));
        initstk->i_nxt = istk;
        initstk->i_type = istk->i_subt;
-       if (initstk->i_type->t_tspec == FUNC)
-               LERROR("initstack_push()");
+       lint_assert(initstk->i_type->t_tspec != FUNC);
 
 again:
        istk = initstk;
@@ -575,8 +568,7 @@
        lt = ln->tn_type->t_tspec;
        rt = tn->tn_type->t_tspec;
 
-       if (!tspec_is_scalar(lt))
-               LERROR("mkinit()");
+       lint_assert(tspec_is_scalar(lt));
 
        if (!typeok(INIT, 0, ln, tn))
                return;
diff -r 99a57299550b -r 46de4bfe3307 usr.bin/xlint/lint1/lint1.h
--- a/usr.bin/xlint/lint1/lint1.h       Wed Dec 30 01:02:38 2020 +0000
+++ b/usr.bin/xlint/lint1/lint1.h       Wed Dec 30 01:33:30 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: lint1.h,v 1.36 2020/12/29 23:12:48 rillig Exp $ */
+/* $NetBSD: lint1.h,v 1.37 2020/12/30 01:33:30 rillig Exp $ */
 
 /*
  * Copyright (c) 1996 Christopher G. Demetriou.  All Rights Reserved.
@@ -436,6 +436,12 @@
 
 #define LERROR(fmt, args...)   lerror(__FILE__, __LINE__, fmt, ##args)
 
+#define lint_assert(cond)                                              \
+       do {                                                            \
+               if (!(cond))                                            \
+                       assert_failed(__FILE__, __LINE__, __func__, #cond); \
+       } while (/*CONSTCOND*/0)
+
 #ifdef BLKDEBUG
 #define ZERO   0xa5
 #else



Home | Main Index | Thread Index | Old Index