xref: /netbsd-src/tests/usr.bin/xlint/lint1/msg_339.c (revision b2baa50111d645353fa30b4deab0f79d93650c8c)
1*b2baa501Srillig /*	$NetBSD: msg_339.c,v 1.4 2023/03/28 14:44:35 rillig Exp $	*/
2746e9c89Srillig # 3 "msg_339.c"
3746e9c89Srillig 
4746e9c89Srillig // Test for message: option '%c' should be listed in the options string [339]
5746e9c89Srillig 
6*b2baa501Srillig /* lint1-extra-flags: -X 351 */
7*b2baa501Srillig 
8746e9c89Srillig int getopt(int, char *const *, const char *);
9746e9c89Srillig extern char *optarg;
10746e9c89Srillig 
11746e9c89Srillig int
main(int argc,char ** argv)12746e9c89Srillig main(int argc, char **argv)
13746e9c89Srillig {
14746e9c89Srillig 	int o;
15746e9c89Srillig 
16ec42194bSrillig 	/* expect+2: warning: option 'c' should be handled in the switch [338] */
17ec42194bSrillig 	/* expect+1: warning: option 'd' should be handled in the switch [338] */
18ec42194bSrillig 	while ((o = getopt(argc, argv, "a:bc:d")) != -1) {
19746e9c89Srillig 		switch (o) {
20746e9c89Srillig 		case 'a':
21746e9c89Srillig 			break;
22746e9c89Srillig 		case 'b':
23746e9c89Srillig 			/*
24746e9c89Srillig 			 * The following while loop must not finish the check
25746e9c89Srillig 			 * for the getopt options.
26746e9c89Srillig 			 */
27746e9c89Srillig 			while (optarg[0] != '\0')
28746e9c89Srillig 				optarg++;
29746e9c89Srillig 			break;
30ec42194bSrillig 		case 'e':
31ec42194bSrillig 			/* expect-1: warning: option 'e' should be listed in the options string [339] */
32746e9c89Srillig 			break;
33ec42194bSrillig 		case 'f':
34ec42194bSrillig 			/* expect-1: warning: option 'f' should be listed in the options string [339] */
35746e9c89Srillig 			/*
36746e9c89Srillig 			 * The case labels in nested switch statements are
37746e9c89Srillig 			 * ignored by the check for getopt options.
38746e9c89Srillig 			 */
39746e9c89Srillig 			switch (optarg[0]) {
40746e9c89Srillig 			case 'X':
41746e9c89Srillig 				break;
42746e9c89Srillig 			}
43746e9c89Srillig 			break;
44746e9c89Srillig 		case '?':
45746e9c89Srillig 		default:
46746e9c89Srillig 			break;
47746e9c89Srillig 		}
48746e9c89Srillig 	}
49746e9c89Srillig 
50746e9c89Srillig 	return 0;
51746e9c89Srillig }
52