Module Name: src Committed By: rillig Date: Sun Jan 3 18:48:37 UTC 2021
Modified Files: src/usr.bin/xlint/lint1: Makefile decl.c err.c lint1.h Added Files: src/usr.bin/xlint/lint1: Makefile.err-msgs-h Log Message: lint: in DEBUG mode, verify printf parameters for messages Since several years GCC validates printf-style strings, and there is no reason not to let GCC do that work. This prevents bugs like the segmentation fault that was fixed in tree.c 1.109 from 2021-01-01. By default, lint is compiled with DEBUG off, but it's easy enough to compile it in debug mode once in a while. To generate a diff of this commit: cvs rdiff -u -r1.54 -r1.55 src/usr.bin/xlint/lint1/Makefile cvs rdiff -u -r0 -r1.1 src/usr.bin/xlint/lint1/Makefile.err-msgs-h cvs rdiff -u -r1.106 -r1.107 src/usr.bin/xlint/lint1/decl.c cvs rdiff -u -r1.63 -r1.64 src/usr.bin/xlint/lint1/err.c cvs rdiff -u -r1.48 -r1.49 src/usr.bin/xlint/lint1/lint1.h 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/Makefile diff -u src/usr.bin/xlint/lint1/Makefile:1.54 src/usr.bin/xlint/lint1/Makefile:1.55 --- src/usr.bin/xlint/lint1/Makefile:1.54 Fri Jan 1 14:51:44 2021 +++ src/usr.bin/xlint/lint1/Makefile Sun Jan 3 18:48:37 2021 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.54 2021/01/01 14:51:44 rillig Exp $ +# $NetBSD: Makefile,v 1.55 2021/01/03 18:48:37 rillig Exp $ .include <bsd.own.mk> @@ -38,9 +38,11 @@ LDADD+= -ll DPADD+= ${LIBL} .endif +.include "Makefile.err-msgs-h" .include "Makefile.ops-h" .include "Makefile.ops-c" .include <bsd.prog.mk> ${SRCS}: ops.h +${SRCS:Nerr.c}: err-msgs.h Index: src/usr.bin/xlint/lint1/decl.c diff -u src/usr.bin/xlint/lint1/decl.c:1.106 src/usr.bin/xlint/lint1/decl.c:1.107 --- src/usr.bin/xlint/lint1/decl.c:1.106 Sun Jan 3 17:42:45 2021 +++ src/usr.bin/xlint/lint1/decl.c Sun Jan 3 18:48:37 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: decl.c,v 1.106 2021/01/03 17:42:45 rillig Exp $ */ +/* $NetBSD: decl.c,v 1.107 2021/01/03 18:48:37 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: decl.c,v 1.106 2021/01/03 17:42:45 rillig Exp $"); +__RCSID("$NetBSD: decl.c,v 1.107 2021/01/03 18:48:37 rillig Exp $"); #endif #include <sys/param.h> @@ -3206,7 +3206,7 @@ print_previous_declaration(int msg, sym_ cpos = curr_pos; curr_pos = psym->s_def_pos; if (msg != -1) { - message(msg); + (message)(msg); } else if (psym->s_def == DEF || psym->s_def == TDEF) { /* previous definition of %s */ message(261, psym->s_name); Index: src/usr.bin/xlint/lint1/err.c diff -u src/usr.bin/xlint/lint1/err.c:1.63 src/usr.bin/xlint/lint1/err.c:1.64 --- src/usr.bin/xlint/lint1/err.c:1.63 Sun Jan 3 17:42:45 2021 +++ src/usr.bin/xlint/lint1/err.c Sun Jan 3 18:48:37 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: err.c,v 1.63 2021/01/03 17:42:45 rillig Exp $ */ +/* $NetBSD: err.c,v 1.64 2021/01/03 18:48:37 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.63 2021/01/03 17:42:45 rillig Exp $"); +__RCSID("$NetBSD: err.c,v 1.64 2021/01/03 18:48:37 rillig Exp $"); #endif #include <sys/types.h> @@ -464,7 +464,7 @@ vwarning(int n, va_list ap) } void -error(int n, ...) +(error)(int n, ...) { va_list ap; @@ -502,7 +502,7 @@ assert_failed(const char *file, int line } void -warning(int n, ...) +(warning)(int n, ...) { va_list ap; @@ -512,7 +512,7 @@ warning(int n, ...) } void -message(int n, ...) +(message)(int n, ...) { va_list ap; const char *fn; @@ -535,7 +535,7 @@ message(int n, ...) * "right"... [perry, 2 Nov 2002] */ void -c99ism(int n, ...) +(c99ism)(int n, ...) { va_list ap; bool extensions_ok = Sflag || gflag; @@ -550,7 +550,7 @@ c99ism(int n, ...) } void -gnuism(int n, ...) +(gnuism)(int n, ...) { va_list ap; Index: src/usr.bin/xlint/lint1/lint1.h diff -u src/usr.bin/xlint/lint1/lint1.h:1.48 src/usr.bin/xlint/lint1/lint1.h:1.49 --- src/usr.bin/xlint/lint1/lint1.h:1.48 Sat Jan 2 18:26:44 2021 +++ src/usr.bin/xlint/lint1/lint1.h Sun Jan 3 18:48:37 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: lint1.h,v 1.48 2021/01/02 18:26:44 rillig Exp $ */ +/* $NetBSD: lint1.h,v 1.49 2021/01/03 18:48:37 rillig Exp $ */ /* * Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved. @@ -33,6 +33,7 @@ */ #include "lint.h" +#include "err-msgs.h" #include "op.h" /* @@ -435,3 +436,26 @@ typedef struct err_set { #endif extern err_set msgset; + + +#ifdef DEBUG +# include "err-msgs.h" + +/* ARGSUSED */ +static inline void __attribute__((format(printf, 1, 2))) +check_printf(const char *fmt, ...) +{ +} + +# define wrap_check_printf(func, id, args...) \ + do { \ + check_printf(__CONCAT(MSG_, id), ##args); \ + (func)(id, ##args); \ + } while (/*CONSTCOND*/0) + +# define error(id, args...) wrap_check_printf(error, id, ##args) +# define warning(id, args...) wrap_check_printf(warning, id, ##args) +# define message(id, args...) wrap_check_printf(message, id, ##args) +# define gnuism(id, args...) wrap_check_printf(gnuism, id, ##args) +# define c99ism(id, args...) wrap_check_printf(c99ism, id, ##args) +#endif Added files: Index: src/usr.bin/xlint/lint1/Makefile.err-msgs-h diff -u /dev/null src/usr.bin/xlint/lint1/Makefile.err-msgs-h:1.1 --- /dev/null Sun Jan 3 18:48:37 2021 +++ src/usr.bin/xlint/lint1/Makefile.err-msgs-h Sun Jan 3 18:48:37 2021 @@ -0,0 +1,13 @@ +# $NetBSD: Makefile.err-msgs-h,v 1.1 2021/01/03 18:48:37 rillig Exp $ + +err-msgs.h: err.c Makefile.err-msgs-h + ${_MKTARGET_CREATE} + sp='[[:space:]]*'; \ + from="^$$sp\(\".*\"\)\,$$sp/\*$$sp\([0-9][0-9]*\)$$sp\*/\$$"; \ + ${TOOL_SED} -n -e "s,$$from,#define MSG_\2 \1,p" < err.c > ${.TARGET}.tmp + mv -f ${.TARGET}.tmp ${.TARGET} + +CLEANFILES+= err-msgs.h +DPSRCS+= err-msgs.h + +externs1.h: err-msgs.h