aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2018-02-21 21:47:24 +0100
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2020-12-29 14:39:38 +0100
commit6d8a3e9551de00258d1663adf87d29954ef96555 (patch)
tree8525bd25e6e358aa65c29c19daa82c14c33d296b
parent0f2eee32cae5b87d1871ebafe766c8b65a5234f8 (diff)
downloadsparse-6d8a3e9551de00258d1663adf87d29954ef96555.tar.gz
add testcases for exotic enum values
There is more than one complexity in the evaluation of enums. Add a test for enums with 'exotic' values not covered in other tests. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
-rw-r--r--validation/enum-type-exotic.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/validation/enum-type-exotic.c b/validation/enum-type-exotic.c
new file mode 100644
index 00000000..a17ca0ad
--- /dev/null
+++ b/validation/enum-type-exotic.c
@@ -0,0 +1,28 @@
+enum foobar {
+ C = (unsigned char)0,
+ L = 1L,
+};
+
+unsigned int foo(void);
+unsigned int foo(void)
+{
+#ifdef __CHECKER__
+ _Static_assert([typeof(C)] == [enum foobar], "enum type");
+ _Static_assert([typeof(C)] != [unsigned char], "char type");
+#endif
+
+ typeof(C) v = ~0;
+ return v;
+}
+
+/*
+ * check-name: enum-type-exotic
+ * check-description:
+ * GCC type's for C is 'int' or maybe 'unsigned int'
+ * but certainly not 'unsigned char' like here.
+ * check-command: test-linearize -Wno-decl $file
+ * check-known-to-fail
+ *
+ * check-output-ignore
+ * check-output-excludes: ret\\.32 *\\$255
+ */