summaryrefslogtreecommitdiffstats
path: root/tests/012/stack.tl
diff options
context:
space:
mode:
Diffstat (limited to 'tests/012/stack.tl')
-rw-r--r--tests/012/stack.tl31
1 files changed, 31 insertions, 0 deletions
diff --git a/tests/012/stack.tl b/tests/012/stack.tl
new file mode 100644
index 00000000..a8d06487
--- /dev/null
+++ b/tests/012/stack.tl
@@ -0,0 +1,31 @@
+(load "../common")
+
+(defun recur () (recur))
+
+(defmacro so (expr)
+ ^(catch ,expr
+ (stack-overflow (exc) :so)))
+
+(test (so (recur)) :so)
+
+(test (let ((pid (fork)))
+ (cond
+ ((zerop pid) (set-stack-limit 0) (recur))
+ (t (let ((status (wait pid)))
+ (w-ifsignaled status)))))
+ t)
+
+(defmacro infexp ()
+ ^(foo (infexp)))
+
+(test (so (expand '(infexp))) :so)
+
+(defvarl orig (get-stack-limit))
+
+(mvtest
+ (set-stack-limit nil) orig
+ (set-stack-limit orig) nil
+ (set-stack-limit 0) orig
+ (set-stack-limit orig) nil
+ (set-stack-limit 65536) orig
+ (set-stack-limit orig) 65536)