Module Name:    src
Committed By:   rillig
Date:           Sun Jan  8 15:22:33 UTC 2023

Modified Files:
        src/tests/usr.bin/xlint/lint1: msg_348.c
        src/usr.bin/xlint/lint1: tree.c

Log Message:
lint: recognize enum constant named 'max' as a count of values

Seen in external/bsd/mdocml/dist/mdoc.h(50).


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/tests/usr.bin/xlint/lint1/msg_348.c
cvs rdiff -u -r1.486 -r1.487 src/usr.bin/xlint/lint1/tree.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_348.c
diff -u src/tests/usr.bin/xlint/lint1/msg_348.c:1.6 src/tests/usr.bin/xlint/lint1/msg_348.c:1.7
--- src/tests/usr.bin/xlint/lint1/msg_348.c:1.6	Sun Jan  8 15:18:02 2023
+++ src/tests/usr.bin/xlint/lint1/msg_348.c	Sun Jan  8 15:22:33 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: msg_348.c,v 1.6 2023/01/08 15:18:02 rillig Exp $	*/
+/*	$NetBSD: msg_348.c,v 1.7 2023/01/08 15:22:33 rillig Exp $	*/
 # 3 "msg_348.c"
 
 // Test for message 348: maximum value %d of '%s' does not match maximum array index %d [348]
@@ -177,7 +177,6 @@ color_with_uc_count_name(enum color_with
 enum uppercase_max {
 	M_FIRST,
 	M_SECOND,
-	/* expect+1: previous declaration of 'M_MAX' [260] */
 	M_MAX
 };
 
@@ -185,14 +184,12 @@ const char *
 uppercase_max_name(enum uppercase_max x)
 {
 	static const char *const name[] = { "first", "second" };
-	/* expect+1: warning: maximum value 2 of 'enum uppercase_max' does not match maximum array index 1 [348] */
 	return name[x];
 }
 
 enum lowercase_max {
 	M_first,
 	M_second,
-	/* expect+1: previous declaration of 'M_max' [260] */
 	M_max
 };
 
@@ -200,6 +197,5 @@ const char *
 lowercase_max_name(enum lowercase_max x)
 {
 	static const char *const name[] = { "first", "second" };
-	/* expect+1: warning: maximum value 2 of 'enum lowercase_max' does not match maximum array index 1 [348] */
 	return name[x];
 }

Index: src/usr.bin/xlint/lint1/tree.c
diff -u src/usr.bin/xlint/lint1/tree.c:1.486 src/usr.bin/xlint/lint1/tree.c:1.487
--- src/usr.bin/xlint/lint1/tree.c:1.486	Wed Jan  4 05:08:22 2023
+++ src/usr.bin/xlint/lint1/tree.c	Sun Jan  8 15:22:33 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: tree.c,v 1.486 2023/01/04 05:08:22 rillig Exp $	*/
+/*	$NetBSD: tree.c,v 1.487 2023/01/08 15:22:33 rillig Exp $	*/
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID)
-__RCSID("$NetBSD: tree.c,v 1.486 2023/01/04 05:08:22 rillig Exp $");
+__RCSID("$NetBSD: tree.c,v 1.487 2023/01/08 15:22:33 rillig Exp $");
 #endif
 
 #include <float.h>
@@ -2058,12 +2058,14 @@ check_enum_array_index(const tnode_t *ln
 		return;
 
 	/*
-	 * If the largest enum constant is named '*_NUM_*', it is typically
-	 * not part of the allowed enum values but a marker for the number
-	 * of actual enum values.
+	 * If the name of the largest enum constant contains 'MAX' or 'NUM',
+	 * that constant is typically not part of the allowed enum values but
+	 * a marker for the number of actual enum values.
 	 */
 	if (max_enum_value == max_array_index + 1 &&
-	    (strstr(max_ec->s_name, "NUM") != NULL ||
+	    (strstr(max_ec->s_name, "MAX") != NULL ||
+	     strstr(max_ec->s_name, "max") != NULL ||
+	     strstr(max_ec->s_name, "NUM") != NULL ||
 	     strstr(max_ec->s_name, "num") != NULL))
 		return;
 

Reply via email to