summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2019-09-25 20:47:28 +0200
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2019-09-30 03:38:41 +0200
commit6d37de7ad9804f1a606839346101f2425ed86a13 (patch)
treeb70bb4ded54ee8f7308b6688e32eb5c9be3f037c
parent2b96cd804dc7e4b5f6a0aae62c1962bd6b2caae9 (diff)
downloadsparse-6d37de7ad9804f1a606839346101f2425ed86a13.tar.gz
add test for enum sign extension
In a declaration like: enum { a = 0x80000000, b = -1, } the underlying type should be long and b's value should be 0xffffffffffffffff (on a 64-bit machine) but is 0xffffffff. Reported-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
-rw-r--r--validation/enum-sign-extend.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/validation/enum-sign-extend.c b/validation/enum-sign-extend.c
new file mode 100644
index 00000000..9dfbc5eb
--- /dev/null
+++ b/validation/enum-sign-extend.c
@@ -0,0 +1,13 @@
+enum num {
+ a = 0x80000000,
+ b = -1,
+};
+
+_Static_assert([typeof(b)] == [long], "type");
+_Static_assert(b == -1L, "value");
+
+/*
+ * check-name: enum-sign-extend
+ * check-command: sparse -m64 $file
+ * check-known-to-fail
+ */