root/usr/src/tools/smatch/src/validation/conditional-type.c
extern void afun(void);
extern void vcond(void);
static int array[3];

struct state {
        int nr:2;
};

enum number {
        zero,
        one,
        two,
        many,
};

static int bad_if(struct state s)
{
        if (vcond()) return 1;
        if (s) return 1;
        return 0;
}
static void bad_if2(int *a, int *b)
{
        if (vcond()) *a = 1;
        *b = 0;
}
static int bad_sel(struct state s)
{
        return vcond() ? 1 : 0;
        return s ? 1 : 0;
}
static int bad_loop_void(void)
{
        while (vcond())
                ;
        for (;vcond();)
                ;
        do
                ;
        while (vcond());
        return 0;
}


static int good_if_int(int a, _Bool b, long c, unsigned char d)
{
        if (a) return 1;
        if (b) return 1;
        if (c) return 1;
        if (d) return 1;
        return 0;
}
static int good_if_float(float a, double b)
{
        if (a) return 1;
        if (b) return 1;
        return 0;
}
static int good_if_enum(void)
{
        if (many) return 1;
        return 0;
}
static int good_if_bitfield(struct state s, struct state *p)
{
        if (s.nr) return 1;
        if (p->nr) return 1;
        return 0;
}
static int good_if_ptr(void *ptr)
{
        if (ptr) return 1;
        if (array) return 1;
        if (afun) return 1;
        return 0;
}

/*
 * check-name: conditional-type
 *
 * check-error-start
conditional-type.c:18:18: error: incorrect type in conditional (non-scalar type)
conditional-type.c:18:18:    got void
conditional-type.c:19:13: error: incorrect type in conditional (non-scalar type)
conditional-type.c:19:13:    got struct state s
conditional-type.c:24:18: error: incorrect type in conditional (non-scalar type)
conditional-type.c:24:18:    got void
conditional-type.c:29:21: error: incorrect type in conditional (non-scalar type)
conditional-type.c:29:21:    got void
conditional-type.c:30:16: error: incorrect type in conditional (non-scalar type)
conditional-type.c:30:16:    got struct state s
conditional-type.c:34:21: error: incorrect type in conditional (non-scalar type)
conditional-type.c:34:21:    got void
conditional-type.c:36:20: error: incorrect type in conditional (non-scalar type)
conditional-type.c:36:20:    got void
conditional-type.c:40:21: error: incorrect type in conditional (non-scalar type)
conditional-type.c:40:21:    got void
 * check-error-end
 */