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:
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('+')