root/tests/usr.bin/xlint/lint1/msg_339.c
/*      $NetBSD: msg_339.c,v 1.6 2026/01/10 17:12:26 rillig Exp $       */
# 3 "msg_339.c"

// Test for message: option '%c' should be listed in the options string [339]

/* lint1-extra-flags: -X 351 */

int getopt(int, char *const *, const char *);
extern char *optarg;

int
main(int argc, char **argv)
{
        int o;

        /* expect+2: warning: option 'c' should be handled in the switch [338] */
        /* expect+1: warning: option 'd' should be handled in the switch [338] */
        while ((o = getopt(argc, argv, "a:bc:d")) != -1) {
                switch (o) {
                case 'a':
                        break;
                case 'b':
                        /*
                         * The following while loop must not finish the check
                         * for the getopt options.
                         */
                        while (optarg[0] != '\0')
                                optarg++;
                        break;
                case 'e':
                        /* expect-1: warning: option 'e' should be listed in the options string [339] */
                        break;
                case 'f':
                        /* expect-1: warning: option 'f' should be listed in the options string [339] */
                        /*
                         * The case labels in nested switch statements are
                         * ignored by the check for getopt options.
                         */
                        switch (optarg[0]) {
                        case 'X':
                                break;
                        }
                        break;
                case '?':
                default:
                        break;
                }
        }

        // There may be several switch statements in the same while loop.
        // Handling an option in the first switch statement still allows it
        // to be handled in the second switch statement as well.
        while ((o = getopt(argc, argv, "a")) != -1) {
                switch (o) {
                case 'a':
                        break;
                }
                switch (o) {
                case 'a':
                        break;
                }
        }

        return 0;
}