Module Name:    src
Committed By:   rillig
Date:           Sun Jan  8 15:18:02 UTC 2023

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

Log Message:
tests/lint: add more tests for enum/array mismatch


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/tests/usr.bin/xlint/lint1/msg_348.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.5 src/tests/usr.bin/xlint/lint1/msg_348.c:1.6
--- src/tests/usr.bin/xlint/lint1/msg_348.c:1.5	Sat Jun 11 11:52:13 2022
+++ src/tests/usr.bin/xlint/lint1/msg_348.c	Sun Jan  8 15:18:02 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: msg_348.c,v 1.5 2022/06/11 11:52:13 rillig Exp $	*/
+/*	$NetBSD: msg_348.c,v 1.6 2023/01/08 15:18:02 rillig Exp $	*/
 # 3 "msg_348.c"
 
 // Test for message 348: maximum value %d of '%s' does not match maximum array index %d [348]
@@ -58,7 +58,7 @@ color_name_computed_index(enum color col
 	    "green",
 	    "blue"
 	};
-	/* No warning since the array index is not a name. */
+	/* No warning since the array index is not a plain identifier. */
 	return name[color + 1];
 }
 
@@ -71,7 +71,10 @@ color_name_cast_from_int(int c)
 	    "green",
 	    "blue"
 	};
-	/* No warning since the array index before conversion is not a name. */
+	/*
+	 * No warning since the array index before conversion is not a plain
+	 * identifier.
+	 */
 	return name[(enum color)(c + 1)];
 }
 
@@ -89,7 +92,11 @@ color_name_explicit_cast_to_int(enum col
 const char *
 color_name_computed_pointer(enum color color, const char *name)
 {
-	/* No warning since 'name' is not an array. */
+	/*
+	 * No warning since the first operand of the selection expression
+	 * is '(&name)', whose type is not an array but instead a
+	 * 'pointer to pointer to const char'.
+	 */
 	return (&name)[color];
 }
 
@@ -131,7 +138,11 @@ const char *
 color_with_count_name(enum color_with_count color)
 {
 	static const char *const name[] = { "red", "green", "blue" };
-	/* No warning since the maximum enum constant is a count. */
+	/*
+	 * No warning since the word 'num' in the last enum constant
+	 * MAY indicate a convenience constant for the total number of
+	 * values, instead of a regular enum value.
+	 */
 	return name[color];
 }
 
@@ -162,3 +173,33 @@ color_with_uc_count_name(enum color_with
 	/* No warning since the maximum enum constant is a count. */
 	return name[color];
 }
+
+enum uppercase_max {
+	M_FIRST,
+	M_SECOND,
+	/* expect+1: previous declaration of 'M_MAX' [260] */
+	M_MAX
+};
+
+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
+};
+
+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];
+}

Reply via email to