Module Name:    src
Committed By:   rillig
Date:           Wed Apr 14 20:06:40 UTC 2021

Modified Files:
        src/tests/usr.bin/xlint/lint1: msg_343.c
        src/usr.bin/xlint/lint1: err.c externs1.h main1.c
        src/usr.bin/xlint/xlint: lint.1 xlint.c

Log Message:
lint: add option to accept C11 features

The list of available letters for the command line options gets shorter
and shorter.  Most of the interesting letters are already used for some
warning categories.  Curiously, -A, -W and -E were all still available.

The option -A nicely matches the intention of the option, which is to
allow a certain set of language features.  To keep the option available
for further extensions, define -Ac11 as the currently only valid option
of that kind.  This allows straight-forward extension for C17 and future
language standards, as well as independent feature-sets.  The options -W
and -E may someday complement the -A option, using the allow/warn/error
categories.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/tests/usr.bin/xlint/lint1/msg_343.c
cvs rdiff -u -r1.109 -r1.110 src/usr.bin/xlint/lint1/err.c
cvs rdiff -u -r1.104 -r1.105 src/usr.bin/xlint/lint1/externs1.h
cvs rdiff -u -r1.42 -r1.43 src/usr.bin/xlint/lint1/main1.c
cvs rdiff -u -r1.42 -r1.43 src/usr.bin/xlint/xlint/lint.1
cvs rdiff -u -r1.59 -r1.60 src/usr.bin/xlint/xlint/xlint.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/lint1/msg_343.c
diff -u src/tests/usr.bin/xlint/lint1/msg_343.c:1.2 src/tests/usr.bin/xlint/lint1/msg_343.c:1.3
--- src/tests/usr.bin/xlint/lint1/msg_343.c:1.2	Wed Apr 14 18:35:40 2021
+++ src/tests/usr.bin/xlint/lint1/msg_343.c	Wed Apr 14 20:06:40 2021
@@ -1,9 +1,9 @@
-/*	$NetBSD: msg_343.c,v 1.2 2021/04/14 18:35:40 rillig Exp $	*/
+/*	$NetBSD: msg_343.c,v 1.3 2021/04/14 20:06:40 rillig Exp $	*/
 # 3 "msg_343.c"
 
 /* Test for message: static array size is a C11 extension [343] */
 
-/* lint1-flags: -sw */
+/* lint1-flags: -gSw */
 
 void takes_int_pointer(int []);
 void takes_int_pointer_with_ignored_size(int [3]);

Index: src/usr.bin/xlint/lint1/err.c
diff -u src/usr.bin/xlint/lint1/err.c:1.109 src/usr.bin/xlint/lint1/err.c:1.110
--- src/usr.bin/xlint/lint1/err.c:1.109	Wed Apr 14 18:38:06 2021
+++ src/usr.bin/xlint/lint1/err.c	Wed Apr 14 20:06:40 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: err.c,v 1.109 2021/04/14 18:38:06 rillig Exp $	*/
+/*	$NetBSD: err.c,v 1.110 2021/04/14 20:06: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.109 2021/04/14 18:38:06 rillig Exp $");
+__RCSID("$NetBSD: err.c,v 1.110 2021/04/14 20:06:40 rillig Exp $");
 #endif
 
 #include <sys/types.h>
@@ -612,19 +612,15 @@ 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;
 
+	if (c11flag)
+		return;
 	va_start(ap, n);
-	if (sflag && !extensions_ok) {
-		verror(n, ap);
-	} else if (sflag || !extensions_ok) {
-		vwarning(n, ap);
-	}
+	verror(n, ap);
 	va_end(ap);
 }
 

Index: src/usr.bin/xlint/lint1/externs1.h
diff -u src/usr.bin/xlint/lint1/externs1.h:1.104 src/usr.bin/xlint/lint1/externs1.h:1.105
--- src/usr.bin/xlint/lint1/externs1.h:1.104	Wed Apr 14 18:35:40 2021
+++ src/usr.bin/xlint/lint1/externs1.h	Wed Apr 14 20:06:40 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: externs1.h,v 1.104 2021/04/14 18:35:40 rillig Exp $	*/
+/*	$NetBSD: externs1.h,v 1.105 2021/04/14 20:06:40 rillig Exp $	*/
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,6 +37,7 @@
 extern	int	aflag;
 extern	bool	bflag;
 extern	bool	cflag;
+extern	bool	c11flag;
 extern	bool	dflag;
 extern	bool	eflag;
 extern	bool	Fflag;

Index: src/usr.bin/xlint/lint1/main1.c
diff -u src/usr.bin/xlint/lint1/main1.c:1.42 src/usr.bin/xlint/lint1/main1.c:1.43
--- src/usr.bin/xlint/lint1/main1.c:1.42	Fri Apr  2 12:16:50 2021
+++ src/usr.bin/xlint/lint1/main1.c	Wed Apr 14 20:06:40 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: main1.c,v 1.42 2021/04/02 12:16:50 rillig Exp $	*/
+/*	$NetBSD: main1.c,v 1.43 2021/04/14 20:06:40 rillig Exp $	*/
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: main1.c,v 1.42 2021/04/02 12:16:50 rillig Exp $");
+__RCSID("$NetBSD: main1.c,v 1.43 2021/04/14 20:06:40 rillig Exp $");
 #endif
 
 #include <sys/types.h>
@@ -68,6 +68,9 @@ bool	bflag;
 /* Print warnings for pointer casts. */
 bool	cflag;
 
+/* Allow features from C11, C99 and C90. */
+bool	c11flag;
+
 /* Print various debug information. */
 bool	dflag;
 
@@ -178,7 +181,7 @@ main(int argc, char *argv[])
 	setprogname(argv[0]);
 
 	ERR_ZERO(&msgset);
-	while ((c = getopt(argc, argv, "abcdeghmprstuvwyzFPR:STX:")) != -1) {
+	while ((c = getopt(argc, argv, "abcdeghmprstuvwyzA:FPR:STX:")) != -1) {
 		switch (c) {
 		case 'a':	aflag++;	break;
 		case 'b':	bflag = true;	break;
@@ -201,6 +204,15 @@ main(int argc, char *argv[])
 		case 'y':	yflag = true;	break;
 		case 'z':	zflag = false;	break;
 
+		case 'A':
+			if (strcmp(optarg, "c11") == 0) {
+				c11flag = true;
+				Sflag = true;
+				sflag = true;
+			} else
+				usage();
+			break;
+
 		case 'm':
 			msglist();
 			return 0;
@@ -284,7 +296,8 @@ static void
 usage(void)
 {
 	(void)fprintf(stderr,
-	    "Usage: %s [-abcdeghmprstuvwyzFST] [-X <id>[,<id>]... src dest\n",
+	    "usage: %s [-abcdeghmprstuvwyzFST] [-Ac11] [-X <id>[,<id>]... "
+	    "src dest\n",
 	    getprogname());
 	exit(1);
 }

Index: src/usr.bin/xlint/xlint/lint.1
diff -u src/usr.bin/xlint/xlint/lint.1:1.42 src/usr.bin/xlint/xlint/lint.1:1.43
--- src/usr.bin/xlint/xlint/lint.1:1.42	Tue Jan 12 20:42:01 2021
+++ src/usr.bin/xlint/xlint/lint.1	Wed Apr 14 20:06:40 2021
@@ -1,4 +1,4 @@
-.\" $NetBSD: lint.1,v 1.42 2021/01/12 20:42:01 rillig Exp $
+.\" $NetBSD: lint.1,v 1.43 2021/04/14 20:06:40 rillig Exp $
 .\"
 .\" Copyright (c) 1996 Christopher G. Demetriou.  All Rights Reserved.
 .\" Copyright (c) 1994, 1995 Jochen Pohl
@@ -30,7 +30,7 @@
 .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 .\"
-.Dd Jan 12, 2021
+.Dd Apr 14, 2021
 .Dt LINT 1
 .Os
 .Sh NAME
@@ -51,6 +51,7 @@
 .Op Fl o Ar outputfile
 .Op Fl U Ar name
 .Op Fl X Ar id Ns Op ,id ...
+.Op Fl Ac11
 .Op Fl Z Ar cpparg
 .Ar
 .Nm lint
@@ -184,6 +185,8 @@ flag must also be specified to provide a
 .Pp
 .Sy Options
 .Bl -tag -width XoXoutputfileXXX
+.It Fl Ac11
+Allow features from C11, C99 and C90.
 .It Fl a
 Report assignments of
 .Sy long

Index: src/usr.bin/xlint/xlint/xlint.c
diff -u src/usr.bin/xlint/xlint/xlint.c:1.59 src/usr.bin/xlint/xlint/xlint.c:1.60
--- src/usr.bin/xlint/xlint/xlint.c:1.59	Wed Apr 14 19:25:48 2021
+++ src/usr.bin/xlint/xlint/xlint.c	Wed Apr 14 20:06:40 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: xlint.c,v 1.59 2021/04/14 19:25:48 rillig Exp $ */
+/* $NetBSD: xlint.c,v 1.60 2021/04/14 20:06:40 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: xlint.c,v 1.59 2021/04/14 19:25:48 rillig Exp $");
+__RCSID("$NetBSD: xlint.c,v 1.60 2021/04/14 20:06:40 rillig Exp $");
 #endif
 
 #include <sys/param.h>
@@ -297,7 +297,7 @@ usage(void)
 	    "usage: %s [-abceghprvwxzHFST] [-s|-t] [-i|-nu]\n"
 	    "%*s [-Dname[=def]] [-Uname] [-Idirectory] [-Z <cpparg>]\n"
 	    "%*s [-Ldirectory] [-llibrary] [-ooutputfile]\n"
-	    "%*s [-X <id>[,<id>]...] file...\n",
+	    "%*s [-X <id>[,<id>]...] [-Ac11] file...\n",
 	    name, indent, "", indent, "", indent, "");
 	(void)fprintf(stderr,
 	    "       %s [-abceghprvwzHFST] [-s|-t] -Clibrary\n"
@@ -375,7 +375,7 @@ main(int argc, char *argv[])
 	(void)signal(SIGQUIT, terminate);
 	(void)signal(SIGTERM, terminate);
 	while ((c = getopt(argc, argv,
-	    "abcd:eghil:no:prstuvwxzB:C:D:FHI:L:M:PR:STU:VX:Z:")) != -1) {
+	    "abcd:eghil:no:prstuvwxzA:B:C:D:FHI:L:M:PR:STU:VX:Z:")) != -1) {
 		switch (c) {
 
 		case 'a':
@@ -391,6 +391,11 @@ main(int argc, char *argv[])
 			appcstrg(&l1flags, flgbuf);
 			break;
 
+		case 'A':
+			appcstrg(&l1flags, "-A");
+			appcstrg(&l1flags, optarg);
+			break;
+
 		case 'F':
 			Fflag = true;
 			/* FALLTHROUGH */

Reply via email to