summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2019-01-10 17:50:43 +0100
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2019-03-05 22:44:34 +0100
commitc1d5521fcd0220052253e5a51fa9e31eae4d7ee2 (patch)
tree701fac2b86fb51e4981ccca86a0c6f3fcedbdc2d
parent7fd3778e2d3a7b17aefea66819bf07feb7a257d3 (diff)
downloadsparse-c1d5521fcd0220052253e5a51fa9e31eae4d7ee2.tar.gz
add test for evaluation of invalid assignments
Due to the way compatible_assignment_types()'s handle type incompatibilities and how expression with an invalid type are nevertheless processed by linearize_expression(), some invalid assignments retunr unwanted error messages (and working around them can create some others). Here are 2 relatively simple tests triggering the situation. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
-rw-r--r--validation/eval-bad-assign1.c15
-rw-r--r--validation/eval-bad-assign2.c22
2 files changed, 37 insertions, 0 deletions
diff --git a/validation/eval-bad-assign1.c b/validation/eval-bad-assign1.c
new file mode 100644
index 00000000..bce4d3d3
--- /dev/null
+++ b/validation/eval-bad-assign1.c
@@ -0,0 +1,15 @@
+static void kos(int *r, int a)
+{
+ r = ({ __builtin_types_compatible_p(int, int); });
+}
+
+/*
+ * check-name: eval-bad-assign1
+ * check-known-to-fail
+ *
+ * check-error-start
+eval-bad-assign1.c:3:11: warning: incorrect type in assignment (different base types)
+eval-bad-assign1.c:3:11: expected int *r
+eval-bad-assign1.c:3:11: got int
+ * check-error-end
+ */
diff --git a/validation/eval-bad-assign2.c b/validation/eval-bad-assign2.c
new file mode 100644
index 00000000..4d08cb90
--- /dev/null
+++ b/validation/eval-bad-assign2.c
@@ -0,0 +1,22 @@
+struct s {
+ char c[1];
+};
+
+struct s fun(void);
+
+
+static void foo(void)
+{
+ char c[1];
+ c = fun().c;
+}
+
+/*
+ * check-name: eval-bad-assign2
+ *
+ * check-error-start
+eval-bad-assign2.c:11:11: warning: incorrect type in assignment (invalid types)
+eval-bad-assign2.c:11:11: expected char c[1]
+eval-bad-assign2.c:11:11: got char *
+ * check-error-end
+ */