Module Name: src Committed By: rillig Date: Wed Apr 14 18:35:40 UTC 2021
Modified Files: src/tests/usr.bin/xlint/lint1: msg_343.c msg_343.exp src/usr.bin/xlint/lint1: cgram.y check-msgs.lua err.c externs1.h lint1.h Log Message: lint: add support for C11-isms such as int[static 3] To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/tests/usr.bin/xlint/lint1/msg_343.c \ src/tests/usr.bin/xlint/lint1/msg_343.exp cvs rdiff -u -r1.215 -r1.216 src/usr.bin/xlint/lint1/cgram.y cvs rdiff -u -r1.9 -r1.10 src/usr.bin/xlint/lint1/check-msgs.lua cvs rdiff -u -r1.107 -r1.108 src/usr.bin/xlint/lint1/err.c cvs rdiff -u -r1.103 -r1.104 src/usr.bin/xlint/lint1/externs1.h cvs rdiff -u -r1.94 -r1.95 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/tests/usr.bin/xlint/lint1/msg_343.c diff -u src/tests/usr.bin/xlint/lint1/msg_343.c:1.1 src/tests/usr.bin/xlint/lint1/msg_343.c:1.2 --- src/tests/usr.bin/xlint/lint1/msg_343.c:1.1 Wed Apr 14 18:27:11 2021 +++ src/tests/usr.bin/xlint/lint1/msg_343.c Wed Apr 14 18:35:40 2021 @@ -1,7 +1,7 @@ -/* $NetBSD: msg_343.c,v 1.1 2021/04/14 18:27:11 rillig Exp $ */ +/* $NetBSD: msg_343.c,v 1.2 2021/04/14 18:35:40 rillig Exp $ */ # 3 "msg_343.c" -/* Test for message: static array size is a C99 extension [343] */ +/* Test for message: static array size is a C11 extension [343] */ /* lint1-flags: -sw */ Index: src/tests/usr.bin/xlint/lint1/msg_343.exp diff -u src/tests/usr.bin/xlint/lint1/msg_343.exp:1.1 src/tests/usr.bin/xlint/lint1/msg_343.exp:1.2 --- src/tests/usr.bin/xlint/lint1/msg_343.exp:1.1 Wed Apr 14 18:27:11 2021 +++ src/tests/usr.bin/xlint/lint1/msg_343.exp Wed Apr 14 18:35:40 2021 @@ -1,6 +1,6 @@ -msg_343.c(10): error: static array size is a C99 extension [343] +msg_343.c(10): error: static array size is a C11 extension [343] msg_343.c(12): error: syntax error 'volatile' [249] -msg_343.c(27): error: static array size is a C99 extension [343] +msg_343.c(27): error: static array size is a C11 extension [343] msg_343.c(34): error: syntax error 'volatile' [249] msg_343.c(38): error: cannot dereference non-pointer type [96] msg_343.c(38): warning: function returns_volatile_int_array expects to return value [214] Index: src/usr.bin/xlint/lint1/cgram.y diff -u src/usr.bin/xlint/lint1/cgram.y:1.215 src/usr.bin/xlint/lint1/cgram.y:1.216 --- src/usr.bin/xlint/lint1/cgram.y:1.215 Wed Apr 14 18:27:11 2021 +++ src/usr.bin/xlint/lint1/cgram.y Wed Apr 14 18:35:40 2021 @@ -1,5 +1,5 @@ %{ -/* $NetBSD: cgram.y,v 1.215 2021/04/14 18:27:11 rillig Exp $ */ +/* $NetBSD: cgram.y,v 1.216 2021/04/14 18:35:40 rillig Exp $ */ /* * Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved. @@ -35,7 +35,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) && !defined(lint) -__RCSID("$NetBSD: cgram.y,v 1.215 2021/04/14 18:27:11 rillig Exp $"); +__RCSID("$NetBSD: cgram.y,v 1.216 2021/04/14 18:35:40 rillig Exp $"); #endif #include <limits.h> @@ -1134,11 +1134,11 @@ param_decl: array_size: T_SCLASS constant_expr { - /* C99 6.7.6.3 */ + /* C11 6.7.6.3p7 */ if ($1 != STATIC) yyerror("Bad attribute"); - /* static array size is a C99 extension */ - c99ism(343); + /* static array size is a C11 extension */ + c11ism(343); $$ = $2; } | constant_expr { Index: src/usr.bin/xlint/lint1/check-msgs.lua diff -u src/usr.bin/xlint/lint1/check-msgs.lua:1.9 src/usr.bin/xlint/lint1/check-msgs.lua:1.10 --- src/usr.bin/xlint/lint1/check-msgs.lua:1.9 Sun Feb 28 12:45:47 2021 +++ src/usr.bin/xlint/lint1/check-msgs.lua Wed Apr 14 18:35:40 2021 @@ -1,5 +1,5 @@ #! /usr/bin/lua --- $NetBSD: check-msgs.lua,v 1.9 2021/02/28 12:45:47 rillig Exp $ +-- $NetBSD: check-msgs.lua,v 1.10 2021/04/14 18:35:40 rillig Exp $ --[[ @@ -83,7 +83,8 @@ local function collect_errors(fname, msg local func, id = line:match("^%s+(%w+)%((%d+)[),]") id = tonumber(id) - if func == "error" or func == "warning" or func == "c99ism" or + if func == "error" or func == "warning" or + func == "c99ism" or func == "c11ism" or func == "gnuism" or func == "message" then local comment = prev:match("^%s+/%* (.+) %*/$") if comment ~= nil then Index: src/usr.bin/xlint/lint1/err.c diff -u src/usr.bin/xlint/lint1/err.c:1.107 src/usr.bin/xlint/lint1/err.c:1.108 --- src/usr.bin/xlint/lint1/err.c:1.107 Wed Apr 14 13:34:08 2021 +++ src/usr.bin/xlint/lint1/err.c Wed Apr 14 18:35:40 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: err.c,v 1.107 2021/04/14 13:34:08 christos Exp $ */ +/* $NetBSD: err.c,v 1.108 2021/04/14 18:35:40 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.107 2021/04/14 13:34:08 christos Exp $"); +__RCSID("$NetBSD: err.c,v 1.108 2021/04/14 18:35:40 rillig Exp $"); #endif #include <sys/types.h> @@ -397,7 +397,7 @@ const char *msgs[] = { "initialization with '[a...b]' is a GNU extension", /* 340 */ "argument to '%s' must be 'unsigned char' or EOF, not '%s'", /* 341 */ "argument to '%s' must be cast to 'unsigned char', not to '%s'", /* 342 */ - "static array size is a C99 extension", /* 343 */ + "static array size is a C11 extension", /* 343 */ }; static struct include_level { @@ -612,6 +612,22 @@ void va_end(ap); } +/* TODO: add a command line option for allowing C99 but not C11. */ +void +(c11ism)(int n, ...) +{ + va_list ap; + bool extensions_ok = Sflag || gflag; + + va_start(ap, n); + if (sflag && !extensions_ok) { + verror(n, ap); + } else if (sflag || !extensions_ok) { + vwarning(n, ap); + } + va_end(ap); +} + void (gnuism)(int n, ...) { Index: src/usr.bin/xlint/lint1/externs1.h diff -u src/usr.bin/xlint/lint1/externs1.h:1.103 src/usr.bin/xlint/lint1/externs1.h:1.104 --- src/usr.bin/xlint/lint1/externs1.h:1.103 Fri Apr 9 15:58:43 2021 +++ src/usr.bin/xlint/lint1/externs1.h Wed Apr 14 18:35:40 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: externs1.h,v 1.103 2021/04/09 15:58:43 rillig Exp $ */ +/* $NetBSD: externs1.h,v 1.104 2021/04/14 18:35:40 rillig Exp $ */ /* * Copyright (c) 1994, 1995 Jochen Pohl @@ -124,6 +124,7 @@ extern void warning(int, ...); extern void message(int, ...); extern void gnuism(int, ...); extern void c99ism(int, ...); +extern void c11ism(int, ...); extern void internal_error(const char *, int, const char *, ...) __attribute__((__noreturn__,__format__(__printf__, 3, 4))); extern void assert_failed(const char *, int, const char *, const char *) Index: src/usr.bin/xlint/lint1/lint1.h diff -u src/usr.bin/xlint/lint1/lint1.h:1.94 src/usr.bin/xlint/lint1/lint1.h:1.95 --- src/usr.bin/xlint/lint1/lint1.h:1.94 Sat Apr 10 18:36:27 2021 +++ src/usr.bin/xlint/lint1/lint1.h Wed Apr 14 18:35:40 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: lint1.h,v 1.94 2021/04/10 18:36:27 rillig Exp $ */ +/* $NetBSD: lint1.h,v 1.95 2021/04/14 18:35:40 rillig Exp $ */ /* * Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved. @@ -482,6 +482,7 @@ check_printf(const char *fmt, ...) # 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) +# define c11ism(id, args...) wrap_check_printf(c11ism, id, ##args) #endif static inline bool