Module Name: src
Committed By: rillig
Date: Fri Apr 12 05:44:38 UTC 2024
Modified Files:
src/usr.bin/xlint/lint1: cksnprintb.c externs1.h tree.c
Log Message:
lint: clean up and speed up the check for snprintb
To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 src/usr.bin/xlint/lint1/cksnprintb.c
cvs rdiff -u -r1.221 -r1.222 src/usr.bin/xlint/lint1/externs1.h
cvs rdiff -u -r1.634 -r1.635 src/usr.bin/xlint/lint1/tree.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/usr.bin/xlint/lint1/cksnprintb.c
diff -u src/usr.bin/xlint/lint1/cksnprintb.c:1.13 src/usr.bin/xlint/lint1/cksnprintb.c:1.14
--- src/usr.bin/xlint/lint1/cksnprintb.c:1.13 Fri Apr 12 05:17:48 2024
+++ src/usr.bin/xlint/lint1/cksnprintb.c Fri Apr 12 05:44:38 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: cksnprintb.c,v 1.13 2024/04/12 05:17:48 rillig Exp $ */
+/* $NetBSD: cksnprintb.c,v 1.14 2024/04/12 05:44:38 rillig Exp $ */
/*-
* Copyright (c) 2024 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID)
-__RCSID("$NetBSD: cksnprintb.c,v 1.13 2024/04/12 05:17:48 rillig Exp $");
+__RCSID("$NetBSD: cksnprintb.c,v 1.14 2024/04/12 05:44:38 rillig Exp $");
#endif
#include <stdbool.h>
@@ -46,7 +46,7 @@ __RCSID("$NetBSD: cksnprintb.c,v 1.13 20
typedef struct {
bool new_style;
const buffer *fmt;
- const tnode_t *value;
+ uint64_t possible_value_bits;
quoted_iterator it;
uint64_t field_width;
@@ -128,7 +128,7 @@ check_bit(checker *ck, uint64_t dir_lsb,
}
}
- if (!(possible_bits(ck->value) & field_mask))
+ if (!(ck->possible_value_bits & field_mask))
/* conversion '%.*s' is unreachable by input value */
warning(378, len, start);
}
@@ -265,9 +265,8 @@ check_conversion(checker *ck)
}
void
-check_snprintb(const tnode_t *expr)
+check_snprintb(const function_call *call)
{
- const function_call *call = expr->u.call;
const char *name;
const buffer *fmt;
const tnode_t *value;
@@ -287,7 +286,7 @@ check_snprintb(const tnode_t *expr)
checker ck = {
.fmt = fmt,
- .value = value,
+ .possible_value_bits = possible_bits(value),
.field_width = 64,
};
Index: src/usr.bin/xlint/lint1/externs1.h
diff -u src/usr.bin/xlint/lint1/externs1.h:1.221 src/usr.bin/xlint/lint1/externs1.h:1.222
--- src/usr.bin/xlint/lint1/externs1.h:1.221 Fri Mar 29 08:35:32 2024
+++ src/usr.bin/xlint/lint1/externs1.h Fri Apr 12 05:44:38 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: externs1.h,v 1.221 2024/03/29 08:35:32 rillig Exp $ */
+/* $NetBSD: externs1.h,v 1.222 2024/04/12 05:44:38 rillig Exp $ */
/*
* Copyright (c) 1994, 1995 Jochen Pohl
@@ -422,4 +422,4 @@ void check_getopt_end_switch(void);
void check_getopt_end_while(void);
/* cksnprintb.c */
-void check_snprintb(const tnode_t *);
+void check_snprintb(const function_call *);
Index: src/usr.bin/xlint/lint1/tree.c
diff -u src/usr.bin/xlint/lint1/tree.c:1.634 src/usr.bin/xlint/lint1/tree.c:1.635
--- src/usr.bin/xlint/lint1/tree.c:1.634 Sun Mar 31 20:28:45 2024
+++ src/usr.bin/xlint/lint1/tree.c Fri Apr 12 05:44:38 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: tree.c,v 1.634 2024/03/31 20:28:45 rillig Exp $ */
+/* $NetBSD: tree.c,v 1.635 2024/04/12 05:44:38 rillig Exp $ */
/*
* Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID)
-__RCSID("$NetBSD: tree.c,v 1.634 2024/03/31 20:28:45 rillig Exp $");
+__RCSID("$NetBSD: tree.c,v 1.635 2024/04/12 05:44:38 rillig Exp $");
#endif
#include <float.h>
@@ -4507,7 +4507,10 @@ check_expr_call(const tnode_t *tn, const
lint_assert(ln->u.ops.left->tn_op == NAME);
if (!szof && !is_compiler_builtin(ln->u.ops.left->u.sym->s_name))
outcall(tn, vctx || cond, retval_discarded);
- check_snprintb(tn);
+
+ const function_call *call = tn->u.call;
+ if (call->args_len == 4 || call->args_len == 5)
+ check_snprintb(call);
}
static void