From c73a5a4bbcb30f176be5b82969b5d681b8481bc5 Mon Sep 17 00:00:00 2001 From: Luc Van Oostenryck Date: Sat, 15 Aug 2020 16:49:17 +0200 Subject: union-cast: add some testcases Casts to union type are a GCC extension and are similar to compound literals. However, sparse doesn't know about them and treats them like other casts to non-scalars. Add some testcases for this and its upcoming warning flag. Signed-off-by: Luc Van Oostenryck --- validation/eval/union-cast-no.c | 24 ++++++++++++++++++++++++ validation/eval/union-cast.c | 25 +++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 validation/eval/union-cast-no.c create mode 100644 validation/eval/union-cast.c diff --git a/validation/eval/union-cast-no.c b/validation/eval/union-cast-no.c new file mode 100644 index 00000000..d06b348d --- /dev/null +++ b/validation/eval/union-cast-no.c @@ -0,0 +1,24 @@ +union u { + int i; + char x[8]; +}; + +static union u foo(int i) +{ + return (union u)i; +} + +static union u bar(long l) +{ + return (union u)l; +} + +/* + * check-name: union-cast-no + * check-command: sparse -Wno-union-cast $file + * check-known-to-fail + * + * check-error-start +eval/union-cast-no.c:13:17: warning: cast to non-scalar + * check-error-end + */ diff --git a/validation/eval/union-cast.c b/validation/eval/union-cast.c new file mode 100644 index 00000000..1d816753 --- /dev/null +++ b/validation/eval/union-cast.c @@ -0,0 +1,25 @@ +union u { + int i; + char x[8]; +}; + +static union u foo(int a) +{ + return (union u)a; +} + +static union u bar(long a) +{ + return (union u)a; +} + +/* + * check-name: union-cast + * check-command: sparse -Wunion-cast $file + * check-known-to-fail + * + * check-error-start +eval/union-cast.c:8:17: warning: cast to union type +eval/union-cast.c:13:17: warning: cast to non-scalar + * check-error-end + */ -- cgit 1.2.3-korg