about summary refs log tree commit diff homepage
path: root/test/Feature
diff options
context:
space:
mode:
authorJiri Slaby <jslaby@suse.cz>2014-10-24 10:48:43 +0200
committerJiri Slaby <jslaby@suse.cz>2016-07-11 17:20:47 +0200
commita6b2f63dbf0dd4498409d3caaf34eaccea3019ea (patch)
treeb3c2c832d3f8fb119a9384dfb6ab77cd23bd6bea /test/Feature
parentc1037080cb61ec6d5d8af3db97a6ad5f35d7af31 (diff)
downloadklee-a6b2f63dbf0dd4498409d3caaf34eaccea3019ea.tar.gz
Executor: do not crash on non-sized globals
Sometimes, globals are not sized and ->getTypeStoreSize on such type
crashes inside the LLVM. Check whether type is sized prior to calling
the function above.

A minimalistic example of Y being unsized with no effect on the actual
code is put to tests.

[v2]
Use klee_warning for printing. And use %.*s formatting string given
StringRef.data() need not be null terminated.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Diffstat (limited to 'test/Feature')
-rw-r--r--test/Feature/NonSizedGlobals.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/test/Feature/NonSizedGlobals.c b/test/Feature/NonSizedGlobals.c
new file mode 100644
index 00000000..b98f7bf1
--- /dev/null
+++ b/test/Feature/NonSizedGlobals.c
@@ -0,0 +1,12 @@
+// RUN: %llvmgcc %s -emit-llvm -g -c -o %t1.bc
+// RUN: rm -rf %t.klee-out
+// RUN: %klee --output-dir=%t.klee-out --exit-on-error %t1.bc
+
+struct X;
+extern struct X Y;
+void *ptr = &Y;
+
+int main()
+{
+	return 0;
+}