Module Name: src Committed By: rillig Date: Mon Aug 30 19:07:57 UTC 2021
Modified Files: src/tests/usr.bin/xlint/lint2: read.exp read.ln src/usr.bin/xlint/lint2: read.c Log Message: lint: revert "remove redundant call to strchr" from yesterday This "refactoring" broke the parsing code for varargs, printflike and scanflike functions, and there were no tests for these. Revert for now, maybe try again later, after adding the corresponding tests. To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/tests/usr.bin/xlint/lint2/read.exp cvs rdiff -u -r1.2 -r1.3 src/tests/usr.bin/xlint/lint2/read.ln cvs rdiff -u -r1.60 -r1.61 src/usr.bin/xlint/lint2/read.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/tests/usr.bin/xlint/lint2/read.exp diff -u src/tests/usr.bin/xlint/lint2/read.exp:1.1 src/tests/usr.bin/xlint/lint2/read.exp:1.2 --- src/tests/usr.bin/xlint/lint2/read.exp:1.1 Sat Aug 7 21:24:14 2021 +++ src/tests/usr.bin/xlint/lint2/read.exp Mon Aug 30 19:07:57 2021 @@ -1 +1,2 @@ a125 declared( read.c(125) ), but never used or defined +bpf_set_error defined( read.c(400) ), but never used Index: src/tests/usr.bin/xlint/lint2/read.ln diff -u src/tests/usr.bin/xlint/lint2/read.ln:1.2 src/tests/usr.bin/xlint/lint2/read.ln:1.3 --- src/tests/usr.bin/xlint/lint2/read.ln:1.2 Tue Aug 24 23:38:51 2021 +++ src/tests/usr.bin/xlint/lint2/read.ln Mon Aug 30 19:07:57 2021 @@ -1,4 +1,4 @@ -# $NetBSD: read.ln,v 1.2 2021/08/24 23:38:51 rillig Exp $ +# $NetBSD: read.ln,v 1.3 2021/08/30 19:07:57 rillig Exp $ # # Cover each path of reading declarations, definitions and usages. @@ -62,3 +62,8 @@ S read.c 302 d 0.302 e 4f302 F1 PvI V # void f302(const volatile int *); 303 d 0.303 e 4f303 F1 PcvI V + +# The "cleanup" in read.c 1.58 produced "not a number: v0...". +# The corresponding tests for parsing vararg, printflike and scanflike are +# still missing, that's why it got through unnoticed. +400 d 0.439 v0 d 13bpf_set_error F3 PsT115_compiler_state PcC E V Index: src/usr.bin/xlint/lint2/read.c diff -u src/usr.bin/xlint/lint2/read.c:1.60 src/usr.bin/xlint/lint2/read.c:1.61 --- src/usr.bin/xlint/lint2/read.c:1.60 Mon Aug 30 18:03:52 2021 +++ src/usr.bin/xlint/lint2/read.c Mon Aug 30 19:07:57 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: read.c,v 1.60 2021/08/30 18:03:52 christos Exp $ */ +/* $NetBSD: read.c,v 1.61 2021/08/30 19:07:57 rillig Exp $ */ /* * Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved. @@ -38,7 +38,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) && !defined(lint) -__RCSID("$NetBSD: read.c,v 1.60 2021/08/30 18:03:52 christos Exp $"); +__RCSID("$NetBSD: read.c,v 1.61 2021/08/30 19:07:57 rillig Exp $"); #endif #include <ctype.h> @@ -136,12 +136,7 @@ parse_int(const char **p) static short parse_short(const char **p) { - - short s; - (*p)++; - s = (short)parse_int(p); - (*p)--; - return s; + return (short)parse_int(p); } void @@ -392,68 +387,68 @@ decldef(pos_t *posp, const char *cp) used = false; - for (; (c = *cp) != '\0'; cp++) { + while (strchr("deiorstuvPS", (c = *cp)) != NULL) { + cp++; switch (c) { case 'd': if (sym.s_def != NODECL) inperr("def"); sym.s_def = DEF; - continue; + break; case 'e': if (sym.s_def != NODECL) inperr("decl"); sym.s_def = DECL; - continue; + break; case 'i': if (sym.s_inline) inperr("inline"); sym.s_inline = true; - continue; + break; case 'o': if (sym.s_old_style_function) inperr("osdef"); sym.s_old_style_function = true; - continue; + break; case 'r': if (sym.s_function_has_return_value) inperr("r"); sym.s_function_has_return_value = true; - continue; + break; case 's': if (sym.s_static) inperr("static"); sym.s_static = true; - continue; + break; case 't': if (sym.s_def != NODECL) inperr("tdef"); sym.s_def = TDEF; - continue; + break; case 'u': if (used) inperr("used"); used = true; - continue; + break; case 'v': if (sym.s_check_only_first_args) inperr("v"); sym.s_check_only_first_args = true; sym.s_check_num_args = parse_short(&cp); - continue; + break; case 'P': if (sym.s_printflike) inperr("P"); sym.s_printflike = true; sym.s_printflike_arg = parse_short(&cp); - continue; + break; case 'S': if (sym.s_scanflike) inperr("S"); sym.s_scanflike = true; sym.s_scanflike_arg = parse_short(&cp); - continue; + break; } - break; } /* read symbol name, doing renaming if necessary */