aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2021-03-01 18:15:08 +0100
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2021-03-01 18:15:08 +0100
commitacc5c29877eff97d2c8dec9319d27f9dcb699a69 (patch)
tree3424310a89671e2ee27dd75554435c78f3ee0b71
parentba404d63c70f00102dbe46dcc95e91c8c9755699 (diff)
parent567dfd4f41d732043876dadc0697ba3b540066da (diff)
downloadsparse-acc5c29877eff97d2c8dec9319d27f9dcb699a69.tar.gz
Merge branch 'fix-restrict' into next
* fix the type in the assignment of 0 to a restricted variable
-rw-r--r--evaluate.c2
-rw-r--r--validation/eval/assign-restricted-ok.c22
2 files changed, 23 insertions, 1 deletions
diff --git a/evaluate.c b/evaluate.c
index 41871e18..a661027f 100644
--- a/evaluate.c
+++ b/evaluate.c
@@ -1442,7 +1442,7 @@ static int check_assignment_types(struct symbol *target, struct expression **rp,
if (sclass & TYPE_FOULED && unfoul(s) == t)
goto Cast;
if (!restricted_value(*rp, target))
- return 1;
+ goto Cast;
if (s == t)
return 1;
} else if (!(sclass & TYPE_RESTRICT))
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
+ */