lua

A copy of the Lua development repository
Log | Files | Refs | README

commit 0085db4596df99b43fc245f71ee444da68cb830b
parent 490d42b5f89563a94994505c75e24086b0a487e6
Author: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
Date:   Mon, 28 Sep 2020 10:13:39 -0300

Avoid GCs when testing stack overflow

A GC step may invoke some finalizer, which may error and emit
a warning due to stack overflfow.

Diffstat:
Mtestes/errors.lua | 20++++++++++++++------
1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/testes/errors.lua b/testes/errors.lua @@ -386,25 +386,33 @@ if not _soft then collectgarbage() print"testing stack overflow" C = 0 - local l = debug.getinfo(1, "l").currentline; function y () C=C+1; y() end + -- get line where stack overflow will happen + local l = debug.getinfo(1, "l").currentline + 1 + local function auxy () C=C+1; auxy() end -- produce a stack overflow + function y () + collectgarbage("stop") -- avoid running finalizers without stack space + auxy() + collectgarbage("restart") + end local function checkstackmessage (m) + print("(expected stack overflow after " .. C .. " calls)") + C = 0 -- prepare next count return (string.find(m, "stack overflow")) end -- repeated stack overflows (to check stack recovery) assert(checkstackmessage(doit('y()'))) - print('+') assert(checkstackmessage(doit('y()'))) - print('+') assert(checkstackmessage(doit('y()'))) - print('+') -- error lines in stack overflow - C = 0 local l1 local function g(x) - l1 = debug.getinfo(x, "l").currentline; y() + l1 = debug.getinfo(x, "l").currentline + 2 + collectgarbage("stop") -- avoid running finalizers without stack space + auxy() + collectgarbage("restart") end local _, stackmsg = xpcall(g, debug.traceback, 1) print('+')