diff options
author | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2019-01-10 17:50:43 +0100 |
---|---|---|
committer | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2019-03-05 22:44:34 +0100 |
commit | c1d5521fcd0220052253e5a51fa9e31eae4d7ee2 (patch) | |
tree | 701fac2b86fb51e4981ccca86a0c6f3fcedbdc2d | |
parent | 7fd3778e2d3a7b17aefea66819bf07feb7a257d3 (diff) | |
download | sparse-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.c | 15 | ||||
-rw-r--r-- | validation/eval-bad-assign2.c | 22 |
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 + */ |