summaryrefslogtreecommitdiff
path: root/testes
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2021-04-07 14:59:26 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2021-04-07 14:59:26 -0300
commit47cffdc723c2e0c6dfaf62b7775ca1c1d338c0a4 (patch)
tree54d46a0530aa2ee09db66d57c66bd313a5de530e /testes
parent36de01d9885562444ae2e2a3e0b7e01b3fb8743b (diff)
downloadlua-github-47cffdc723c2e0c6dfaf62b7775ca1c1d338c0a4.tar.gz
Bug: tbc variables in "for" loops don't avoid tail calls
Diffstat (limited to 'testes')
-rw-r--r--testes/locals.lua23
1 files changed, 23 insertions, 0 deletions
diff --git a/testes/locals.lua b/testes/locals.lua
index 2c67edbd..6aad5d25 100644
--- a/testes/locals.lua
+++ b/testes/locals.lua
@@ -335,6 +335,29 @@ do
end
+do
+ -- bug in 5.4.3: previous condition (calls cannot be tail in the
+ -- scope of to-be-closed variables) must be valid for tbc variables
+ -- created by 'for' loops.
+
+ local closed = false
+
+ local function foo ()
+ return function () return true end, 0, 0,
+ func2close(function () closed = true end)
+ end
+
+ local function tail() return closed end
+
+ local function foo1 ()
+ for k in foo() do return tail() end
+ end
+
+ assert(foo1() == false)
+ assert(closed == true)
+end
+
+
do print("testing errors in __close")
-- original error is in __close