aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/validation/eval/assign-restricted-ok.c
diff options
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2021-02-24 22:34:26 +0100
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2021-02-24 22:50:16 +0100
commit567dfd4f41d732043876dadc0697ba3b540066da (patch)
tree5e8de2fb9086ae36a7b0f461dbc0aac117b503fa /validation/eval/assign-restricted-ok.c
parent60c1f2706e30eacc29296e6cb5d9327c85a01340 (diff)
downloadsparse-dev-567dfd4f41d732043876dadc0697ba3b540066da.tar.gz
fix eval of the assignment of a non-restricted value to a restricted variable
Assignment to restricted variables are severely ... restricted. Nevertheless, one value is always fine because it has always the same bit representation: 0. So, 0 is accepted unconditionally but this creates a problem because the type of this 0 needs to be adjusted. Otherwise 0 (int) is assigned as-is even on restricted variable with a different bit-length. Fix this by casting the value to the target type before accepting it. Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
Diffstat (limited to 'validation/eval/assign-restricted-ok.c')
-rw-r--r--validation/eval/assign-restricted-ok.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/validation/eval/assign-restricted-ok.c b/validation/eval/assign-restricted-ok.c
new file mode 100644
index 00000000..df94d8c9
--- /dev/null
+++ b/validation/eval/assign-restricted-ok.c
@@ -0,0 +1,22 @@
+#ifdef __CHECKER__
+#define __bitwise __attribute__((bitwise))
+#else
+#define __bitwise
+#endif
+
+typedef __INT16_TYPE__ __bitwise __be16;
+
+static __be16 foo(void)
+{
+ __be16 val = 0;
+ return val;
+}
+
+/*
+ * check-name: assign-restricted-ok
+ * check-command: test-linearize -fdump-ir $file
+ *
+ * check-output-ignore
+ * check-output-contains: store\\.16
+ * check-output-excludes: store\\.32
+ */