aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/validation/scheck
diff options
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2021-04-17 15:14:26 +0200
committerLuc Van Oostenryck <luc.vanoostenryck@gmail.com>2021-04-17 15:14:26 +0200
commitbb4239aafe31493a395d7777de5b3c33ea06a98d (patch)
tree0835acb4336044b006f5180616355879b1db7501 /validation/scheck
parent2cd6d34e815a7442b0b113f395504131b3a92e77 (diff)
parent15806a1f68178a278c7a297b163d5692fe71cbf2 (diff)
downloadsparse-dev-bb4239aafe31493a395d7777de5b3c33ea06a98d.tar.gz
Merge branch 'schecker'
* add a symbolic checker
Diffstat (limited to 'validation/scheck')
-rw-r--r--validation/scheck/ko.c10
-rw-r--r--validation/scheck/ok.c22
2 files changed, 32 insertions, 0 deletions
diff --git a/validation/scheck/ko.c b/validation/scheck/ko.c
new file mode 100644
index 00000000..dbd861ea
--- /dev/null
+++ b/validation/scheck/ko.c
@@ -0,0 +1,10 @@
+static void ko(int x)
+{
+ __assert((~x) == (~0 + x));
+}
+
+/*
+ * check-name: scheck-ko
+ * check-command: scheck $file
+ * check-known-to-fail
+ */
diff --git a/validation/scheck/ok.c b/validation/scheck/ok.c
new file mode 100644
index 00000000..1e5314f2
--- /dev/null
+++ b/validation/scheck/ok.c
@@ -0,0 +1,22 @@
+static void ok(int x)
+{
+ __assert((~x) == (~0 - x)); // true but not simplified yet
+ __assert_eq(~x, ~0 - x);
+ __assert_const(x & 0, 0);
+}
+
+static void always(int x)
+{
+ __assert((x - x) == 0); // true and simplified
+}
+
+static void assumed(int x, int a, int b)
+{
+ __assume((a & ~b) == 0);
+ __assert_eq((x ^ a) | b, x | b);
+}
+
+/*
+ * check-name: scheck-ok
+ * check-command: scheck $file
+ */