aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/Feature/MultipleWriteResolution.c
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-05-21 04:36:41 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-05-21 04:36:41 +0000
commit6f290d8f9e9d7faac295cb51fc96884a18f4ded4 (patch)
tree46e7d426abc0c9f06ac472ac6f7f9e661b5d78cb /test/Feature/MultipleWriteResolution.c
parenta55960edd4dcd7535526de8d2277642522aa0209 (diff)
downloadklee-6f290d8f9e9d7faac295cb51fc96884a18f4ded4.tar.gz
Initial KLEE checkin.
- Lots more tweaks, documentation, and web page content is needed, but this should compile & work on OS X & Linux. git-svn-id: https://llvm.org/svn/llvm-project/klee/trunk@72205 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Feature/MultipleWriteResolution.c')
-rw-r--r--test/Feature/MultipleWriteResolution.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/test/Feature/MultipleWriteResolution.c b/test/Feature/MultipleWriteResolution.c
new file mode 100644
index 00000000..f07b9710
--- /dev/null
+++ b/test/Feature/MultipleWriteResolution.c
@@ -0,0 +1,43 @@
+// RUN: echo "x" > %t1.res
+// RUN: echo "x" >> %t1.res
+// RUN: echo "x" >> %t1.res
+// RUN: echo "x" >> %t1.res
+// RUN: %llvmgcc %s -emit-llvm -O0 -c -o %t1.bc
+// RUN: %klee %t1.bc > %t1.log
+// RUN: diff %t1.res %t1.log
+
+#include <stdio.h>
+
+unsigned klee_urange(unsigned start, unsigned end) {
+ unsigned x;
+ klee_make_symbolic(&x, sizeof x);
+ if (x-start>=end-start) klee_silent_exit(0);
+ return x;
+}
+
+int *make_int(int i) {
+ int *x = malloc(sizeof(*x));
+ *x = i;
+ return x;
+}
+
+int main() {
+ int *buf[4];
+ int i,s,t;
+
+ for (i=0; i<4; i++)
+ buf[i] = make_int((i+1)*2);
+
+ s = klee_urange(0,4);
+
+ *buf[s] = 5;
+
+ if ((*buf[0] + *buf[1] + *buf[2] + *buf[3]) == 17)
+ if (s!=3)
+ abort();
+
+ printf("x\n");
+ fflush(stdout);
+
+ return 0;
+}