summaryrefslogtreecommitdiffstats
path: root/tests/compile.test
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2019-09-03 10:57:09 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2019-09-03 10:57:09 (GMT)
commit0625bbefb4463431bf6b28fe35a435a02f1eb038 (patch)
tree9c977653388d061f9b8cf0661081468846417a5d /tests/compile.test
parentdbdb35e20eceb44dfbc8c9ecba30f5fdf75aac4e (diff)
parent2d3d61a110e7b0bb25fd02cc60e00098e1054565 (diff)
downloadtcl-0625bbefb4463431bf6b28fe35a435a02f1eb038.zip
tcl-0625bbefb4463431bf6b28fe35a435a02f1eb038.tar.gz
tcl-0625bbefb4463431bf6b28fe35a435a02f1eb038.tar.bz2
Merge 8.7
Diffstat (limited to 'tests/compile.test')
-rw-r--r--tests/compile.test31
1 files changed, 31 insertions, 0 deletions
diff --git a/tests/compile.test b/tests/compile.test
index c8d4f02..671d405 100644
--- a/tests/compile.test
+++ b/tests/compile.test
@@ -466,6 +466,37 @@ test compile-13.1 {testing underestimate of maxStackSize in list cmd} {exec} {
list [catch {exec [interpreter] << $script} msg] $msg
} {0 OK}
+# Tests of nested compile (body in body compilation), should not generate stack overflow
+# (with abnormal program termination), bug [fec0c17d39]:
+test compile-13.2 {TclCompileScript: testing nested scripts compilation} -setup {
+ set i [interp create]
+ interp recursionlimit $i [expr {10000+50}]
+ $i eval {proc gencode {nr {cmd eval} {nl 0}} {
+ set code ""
+ set e ""; if {$nl} {set e "\n"}
+ for {set i 0} {$i < $nr} {incr i} {
+ append code "$cmd \{$e"
+ }
+ append code "lappend result 1$e"
+ for {set i 0} {$i < $nr} {incr i} {
+ append code "\}$e"
+ }
+ #puts [format "%% %.40s ... %d bytes" $code [string length $code]]
+ return $code
+ }}
+} -body {
+ # Test different compilation variants (instructions evalStk, invokeStk, etc),
+ # with 2000 (1000 in debug) nested scripts (bodies). If you get SO/SF exceptions on some low-stack
+ # boxes or systems, please don't decrease it (either provide a constraint)
+ $i eval {foreach cmd {eval "if 1" try catch} {
+ set c [gencode [expr {![::tcl::pkgconfig get debug] ? 2000 : 1000}] $cmd]
+ if 1 $c
+ }}
+ $i eval {set result}
+} -result {1 1 1 1} -cleanup {
+ interp delete $i
+}
+
# Tests compile-14.* for [Bug 599788] [Bug 0c043a175a47da8c2342]
test compile-14.1 {testing errors in element name; segfault?} {} {
catch {set a([error])} msg1