about summary refs log tree commit diff homepage
path: root/test/Feature/StackOverflow.c
diff options
context:
space:
mode:
authorMartin Nowack <martin.nowack@gmail.com>2016-11-06 11:46:40 +0100
committerCristian Cadar <c.cadar@imperial.ac.uk>2018-11-05 20:09:11 +0000
commitea2b756666fa60b47efe16510d81c3b29beab4df (patch)
tree9aeb7de0891adae62bbb95b56ac8409fa5749a37 /test/Feature/StackOverflow.c
parent36a9acc3880861842cc6a9da11dd872e36ed19cb (diff)
downloadklee-ea2b756666fa60b47efe16510d81c3b29beab4df.tar.gz
Check for stack overflow in a tested program
Check if a state reaches the maximum number of stack frames allowed.
To be performant, the number of stack frames are checked.
In comparison, native execution checks the size of the stack.
Still, this is good enough to find possible stack overflows.

The limit can be changed with `-max-stack-frames`. The current
default is 8192 frames.
Diffstat (limited to 'test/Feature/StackOverflow.c')
-rw-r--r--test/Feature/StackOverflow.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/test/Feature/StackOverflow.c b/test/Feature/StackOverflow.c
new file mode 100644
index 00000000..837d3db8
--- /dev/null
+++ b/test/Feature/StackOverflow.c
@@ -0,0 +1,16 @@
+// RUN: %llvmgcc -emit-llvm -g -c -o %t.bc %s
+// RUN: rm -rf %t.klee-out
+// RUN: %klee --output-dir=%t.klee-out %t.bc > %t.output.log 2>&1
+// RUN: FileCheck -input-file=%t.output.log %s
+
+void recursive(unsigned nr){
+  if (nr == 0)
+    return;
+  recursive(nr-1);
+}
+
+int main() {
+  recursive(10000);
+  return 0;
+}
+// CHECK: Maximum stack size reached