summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2013-05-29 17:20:29 (GMT)
committerdgp <dgp@users.sourceforge.net>2013-05-29 17:20:29 (GMT)
commite7da373e0c6ede5c428aba9f55cd0ecc9317f5ec (patch)
treeb9cef2c0bd1c8227af75edbd58ce327f0edd853b
parentc929650e2f079e196a96f2984cd24820bcc56d3e (diff)
downloadtcl-e7da373e0c6ede5c428aba9f55cd0ecc9317f5ec.zip
tcl-e7da373e0c6ede5c428aba9f55cd0ecc9317f5ec.tar.gz
tcl-e7da373e0c6ede5c428aba9f55cd0ecc9317f5ec.tar.bz2
3614102 - Reset stack housekeeping when compileProc fails.
-rw-r--r--generic/tclCompile.c8
-rw-r--r--tests/compile.test6
2 files changed, 12 insertions, 2 deletions
diff --git a/generic/tclCompile.c b/generic/tclCompile.c
index dd179ea..039a694 100644
--- a/generic/tclCompile.c
+++ b/generic/tclCompile.c
@@ -2069,9 +2069,7 @@ TclCompileScript(
unsigned savedCodeNext =
envPtr->codeNext - envPtr->codeStart;
int update = 0;
-#ifdef TCL_COMPILE_DEBUG
int startStackDepth = envPtr->currStackDepth;
-#endif
/*
* Mark the start of the command; the proper bytecode
@@ -2164,6 +2162,12 @@ TclCompileScript(
envPtr->numCommands = savedNumCmds;
envPtr->codeNext = envPtr->codeStart + savedCodeNext;
+
+ /*
+ * And the stack depth too!! [Bug 3614102].
+ */
+
+ envPtr->currStackDepth = startStackDepth;
}
/*
diff --git a/tests/compile.test b/tests/compile.test
index 4d91940..51db0a2 100644
--- a/tests/compile.test
+++ b/tests/compile.test
@@ -707,6 +707,12 @@ test compile-18.19 {disassembler - basics} -setup {
} -cleanup {
foo destroy
} -match glob -result *
+
+test compile-19.0 {Bug 3614102: reset stack housekeeping} -body {
+ # This will panic in a --enable-symbols=compile build, unless bug is fixed.
+ apply {{} {list [if 1]}}
+} -returnCodes error -match glob -result *
+
# TODO sometime - check that bytecode from tbcload is *not* disassembled.
# cleanup