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