Module Name:    src
Committed By:   rillig
Date:           Sun Dec 10 15:29:38 UTC 2023

Modified Files:
        src/tests/usr.bin/xlint/lint1: queries.c t_usage.sh
        src/usr.bin/xlint/lint1: decl.c err.c externs1.h

Log Message:
lint: allow querying for 'static' followed by non-'static' declaration


To generate a diff of this commit:
cvs rdiff -u -r1.19 -r1.20 src/tests/usr.bin/xlint/lint1/queries.c
cvs rdiff -u -r1.11 -r1.12 src/tests/usr.bin/xlint/lint1/t_usage.sh
cvs rdiff -u -r1.384 -r1.385 src/usr.bin/xlint/lint1/decl.c
cvs rdiff -u -r1.220 -r1.221 src/usr.bin/xlint/lint1/err.c
cvs rdiff -u -r1.208 -r1.209 src/usr.bin/xlint/lint1/externs1.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/queries.c
diff -u src/tests/usr.bin/xlint/lint1/queries.c:1.19 src/tests/usr.bin/xlint/lint1/queries.c:1.20
--- src/tests/usr.bin/xlint/lint1/queries.c:1.19	Mon Jul  3 15:29:42 2023
+++ src/tests/usr.bin/xlint/lint1/queries.c	Sun Dec 10 15:29:38 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: queries.c,v 1.19 2023/07/03 15:29:42 rillig Exp $	*/
+/*	$NetBSD: queries.c,v 1.20 2023/12/10 15:29:38 rillig Exp $	*/
 # 3 "queries.c"
 
 /*
@@ -15,7 +15,7 @@
  * 	such as casts between arithmetic types.
  */
 
-/* lint1-extra-flags: -q 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 -X 351 */
+/* lint1-extra-flags: -q 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 -X 351 */
 
 typedef unsigned char u8_t;
 typedef unsigned short u16_t;
@@ -448,6 +448,17 @@ Q15(void)
 }
 
 /*
+ * Even though C99 6.2.2p4 allows a 'static' declaration followed by a
+ * non-'static' declaration, it may look confusing.
+ */
+static void Q16(void);
+/* expect+2: 'Q16' was declared 'static', now non-'static' [Q16] */
+/* expect+1: warning: static function 'Q16' unused [236] */
+void Q16(void)
+{
+}
+
+/*
  * Since queries do not affect the exit status, force a warning to make this
  * test conform to the general expectation that a test that produces output
  * exits non-successfully.

Index: src/tests/usr.bin/xlint/lint1/t_usage.sh
diff -u src/tests/usr.bin/xlint/lint1/t_usage.sh:1.11 src/tests/usr.bin/xlint/lint1/t_usage.sh:1.12
--- src/tests/usr.bin/xlint/lint1/t_usage.sh:1.11	Thu Aug  3 18:48:42 2023
+++ src/tests/usr.bin/xlint/lint1/t_usage.sh	Sun Dec 10 15:29:38 2023
@@ -1,4 +1,4 @@
-# $NetBSD: t_usage.sh,v 1.11 2023/08/03 18:48:42 rillig Exp $
+# $NetBSD: t_usage.sh,v 1.12 2023/12/10 15:29:38 rillig Exp $
 #
 # Copyright (c) 2023 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -89,13 +89,13 @@ enable_queries_body()
 
 	# The largest known query.
 	atf_check \
-	    "$lint1" -q 15 code.c /dev/null
+	    "$lint1" -q 16 code.c /dev/null
 
 	# Larger than the largest known query.
 	atf_check \
 	    -s 'exit:1' \
-	    -e "inline:lint1: invalid query ID '16'\n" \
-	    "$lint1" -q 16 code.c /dev/null
+	    -e "inline:lint1: invalid query ID '17'\n" \
+	    "$lint1" -q 17 code.c /dev/null
 
 	# Whitespace is not allowed before a query ID.
 	atf_check \

Index: src/usr.bin/xlint/lint1/decl.c
diff -u src/usr.bin/xlint/lint1/decl.c:1.384 src/usr.bin/xlint/lint1/decl.c:1.385
--- src/usr.bin/xlint/lint1/decl.c:1.384	Sun Dec 10 14:59:47 2023
+++ src/usr.bin/xlint/lint1/decl.c	Sun Dec 10 15:29:38 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: decl.c,v 1.384 2023/12/10 14:59:47 rillig Exp $ */
+/* $NetBSD: decl.c,v 1.385 2023/12/10 15:29:38 rillig Exp $ */
 
 /*
  * Copyright (c) 1996 Christopher G. Demetriou.  All Rights Reserved.
@@ -38,7 +38,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID)
-__RCSID("$NetBSD: decl.c,v 1.384 2023/12/10 14:59:47 rillig Exp $");
+__RCSID("$NetBSD: decl.c,v 1.385 2023/12/10 15:29:38 rillig Exp $");
 #endif
 
 #include <sys/param.h>
@@ -1430,6 +1430,12 @@ declarator_name(sym_t *sym)
 		dcs->d_redeclared_symbol = NULL;
 	} else {
 		dcs->d_redeclared_symbol = sym;
+		if (is_query_enabled[16]
+		    && sym->s_scl == STATIC && dcs->d_scl != STATIC) {
+			/* '%s' was declared 'static', now non-'static' */
+			query_message(16, sym->s_name);
+			print_previous_declaration(sym);
+		}
 		sym = pushdown(sym);
 	}
 

Index: src/usr.bin/xlint/lint1/err.c
diff -u src/usr.bin/xlint/lint1/err.c:1.220 src/usr.bin/xlint/lint1/err.c:1.221
--- src/usr.bin/xlint/lint1/err.c:1.220	Sun Dec  3 18:17:41 2023
+++ src/usr.bin/xlint/lint1/err.c	Sun Dec 10 15:29:38 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: err.c,v 1.220 2023/12/03 18:17:41 rillig Exp $	*/
+/*	$NetBSD: err.c,v 1.221 2023/12/10 15:29:38 rillig Exp $	*/
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID)
-__RCSID("$NetBSD: err.c,v 1.220 2023/12/03 18:17:41 rillig Exp $");
+__RCSID("$NetBSD: err.c,v 1.221 2023/12/10 15:29:38 rillig Exp $");
 #endif
 
 #include <limits.h>
@@ -714,10 +714,11 @@ static const char *queries[] = {
 	"redundant 'extern' in function declaration of '%s'",	      /* Q13 */
 	"comparison '%s' of 'char' with plain integer %d",	      /* Q14 */
 	"implicit conversion from integer 0 to pointer '%s'",	      /* Q15 */
+	"'%s' was declared 'static', now non-'static'",		      /* Q16 */
 };
 
 bool any_query_enabled;		/* for optimizing non-query scenarios */
-static bool is_query_enabled[sizeof(queries) / sizeof(queries[0])];
+bool is_query_enabled[sizeof(queries) / sizeof(queries[0])];
 
 void
 (query_message)(int query_id, ...)

Index: src/usr.bin/xlint/lint1/externs1.h
diff -u src/usr.bin/xlint/lint1/externs1.h:1.208 src/usr.bin/xlint/lint1/externs1.h:1.209
--- src/usr.bin/xlint/lint1/externs1.h:1.208	Sun Dec  3 18:17:41 2023
+++ src/usr.bin/xlint/lint1/externs1.h	Sun Dec 10 15:29:38 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: externs1.h,v 1.208 2023/12/03 18:17:41 rillig Exp $	*/
+/*	$NetBSD: externs1.h,v 1.209 2023/12/10 15:29:38 rillig Exp $	*/
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -179,6 +179,7 @@ extern bool seen_error;
 extern bool seen_warning;
 extern int sytxerr;
 extern bool any_query_enabled;
+extern bool is_query_enabled[];
 
 void msglist(void);
 void error_at(int, const pos_t *, ...);

Reply via email to