diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2021-04-07 14:59:26 -0300 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2021-04-07 14:59:26 -0300 |
| commit | 47cffdc723c2e0c6dfaf62b7775ca1c1d338c0a4 (patch) | |
| tree | 54d46a0530aa2ee09db66d57c66bd313a5de530e /testes | |
| parent | 36de01d9885562444ae2e2a3e0b7e01b3fb8743b (diff) | |
| download | lua-github-47cffdc723c2e0c6dfaf62b7775ca1c1d338c0a4.tar.gz | |
Bug: tbc variables in "for" loops don't avoid tail calls
Diffstat (limited to 'testes')
| -rw-r--r-- | testes/locals.lua | 23 |
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 |
