root/tests/usr.bin/xlint/lint1/msg_333.c
/*      $NetBSD: msg_333.c,v 1.8 2024/11/13 04:32:49 rillig Exp $       */
# 3 "msg_333.c"

// Test for message: controlling expression must be bool, not '%s' [333]
//
// See d_c99_bool_strict.c for many more examples.

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

typedef _Bool bool;

static enum tagged_color {
        tagged_red,
} e1;
typedef enum {
        typedef_red,
} typedef_color;
static typedef_color e2;

const char *
example(bool b, int i, const char *p)
{

        if (b)
                return "bool";

        /* expect+1: error: controlling expression must be bool, not 'int' [333] */
        if (i)
                return "int";

        /* expect+1: error: controlling expression must be bool, not 'enum tagged_color' [333] */
        if (e1)
                return "tagged enum";

        /* expect+1: error: controlling expression must be bool, not 'enum typedef typedef_color' [333] */
        if (e2)
                return "typedef enum";

        /* expect+1: error: controlling expression must be bool, not 'pointer' [333] */
        if (p)
                return "pointer";

        if (__lint_false) {
                /* expect+1: warning: 'return' statement not reached [193] */
                return "bool constant";
        }

        /* expect+1: error: controlling expression must be bool, not 'int' [333] */
        if (0) {
                /* expect+1: warning: 'return' statement not reached [193] */
                return "integer constant";
        }

        return p + i;
}