From 0085db4596df99b43fc245f71ee444da68cb830b Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Mon, 28 Sep 2020 10:14:06 -0300 Subject: Avoid GCs when testing stack overflow A GC step may invoke some finalizer, which may error and emit a warning due to stack overflfow. --- testes/errors.lua | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/testes/errors.lua b/testes/errors.lua index f975b3dd..422c1128 100644 --- 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('+') -- cgit v1.2.3-55-g6feb