Avoid GCs when testing stack overflow
A GC step may invoke some finalizer, which may error and emit
a warning due to stack overflfow.
diff --git a/testes/errors.lua b/testes/errors.lua
index f975b3d..422c112 100644
--- a/testes/errors.lua
+++ b/testes/errors.lua
@@ -386,25 +386,33 @@
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('+')