aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/validation
diff options
Diffstat (limited to 'validation')
-rw-r--r--validation/conditional-type.c99
1 files changed, 99 insertions, 0 deletions
diff --git a/validation/conditional-type.c b/validation/conditional-type.c
new file mode 100644
index 00000000..a14c05ec
--- /dev/null
+++ b/validation/conditional-type.c
@@ -0,0 +1,99 @@
+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
+conditional-type.c:18:18: got void
+conditional-type.c:19:13: error: incorrect type in conditional
+conditional-type.c:19:13: got struct state s
+conditional-type.c:24:18: error: incorrect type in conditional
+conditional-type.c:24:18: got void
+conditional-type.c:29:21: error: incorrect type in conditional
+conditional-type.c:29:21: got void
+conditional-type.c:30:16: error: incorrect type in conditional
+conditional-type.c:30:16: got struct state s
+conditional-type.c:34:21: error: incorrect type in conditional
+conditional-type.c:34:21: got void
+conditional-type.c:36:20: error: incorrect type in conditional
+conditional-type.c:36:20: got void
+conditional-type.c:40:21: error: incorrect type in conditional
+conditional-type.c:40:21: got void
+ * check-error-end
+ */