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: non-scalar type in conditional:
conditional-type.c:18:18:    void
conditional-type.c:19:13: error: non-scalar type in conditional:
conditional-type.c:19:13:    struct state s
conditional-type.c:24:18: error: non-scalar type in conditional:
conditional-type.c:24:18:    void
conditional-type.c:29:21: error: non-scalar type in conditional:
conditional-type.c:29:21:    void
conditional-type.c:30:16: error: non-scalar type in conditional:
conditional-type.c:30:16:    struct state s
conditional-type.c:34:21: error: non-scalar type in conditional:
conditional-type.c:34:21:    void
conditional-type.c:36:20: error: non-scalar type in conditional:
conditional-type.c:36:20:    void
conditional-type.c:40:21: error: non-scalar type in conditional:
conditional-type.c:40:21:    void
 * check-error-end
 */
