Accidentally discovered this one during a two-week Nelua challenge. Minimized with picire (delta debugger.)
Bug description
An assert statement which is not in a preprocessor line causes the compiler to crash internally.
/usr/local/bin/nelua-lua: /usr/local/lib/nelua/lualib/nelua/cbuiltins.lua:1453: assertion failed!
stack traceback:
[C]: in function 'assert'
/usr/local/lib/nelua/lualib/nelua/cbuiltins.lua:1453: in local 'builtin'
/usr/local/lib/nelua/lualib/nelua/cgenerator.lua:1575: in local 'visit'
/usr/local/lib/nelua/lualib/nelua/visitorcontext.lua:171: in function 'nelua.visitorcontext.traverse_node'
/usr/local/lib/nelua/lualib/nelua/emitter.lua:160: in function 'nelua.emitter.add_value'
/usr/local/lib/nelua/lualib/nelua/cemitter.lua:186: in function 'nelua.cemitter.add_converted_val'
/usr/local/lib/nelua/lualib/nelua/cgenerator.lua:660: in upvalue 'visitor_Call'
/usr/local/lib/nelua/lualib/nelua/cgenerator.lua:706: in local 'visit'
/usr/local/lib/nelua/lualib/nelua/visitorcontext.lua:171: in function 'nelua.visitorcontext.traverse_node'
/usr/local/lib/nelua/lualib/nelua/emitter.lua:160: in function 'nelua.emitter.add_value'
... (skipping 10 levels)
/usr/local/lib/nelua/lualib/nelua/cgenerator.lua:1709: in function 'nelua.cgenerator.emit_nelua_main'
/usr/local/lib/nelua/lualib/nelua/cgenerator.lua:1739: in function 'nelua.cgenerator.emit_entrypoint'
/usr/local/lib/nelua/lualib/nelua/cgenerator.lua:1761: in function 'nelua.cgenerator.generate'
/usr/local/lib/nelua/lualib/nelua/runner.lua:206: in upvalue 'run'
/usr/local/lib/nelua/lualib/nelua/runner.lua:262: in function </usr/local/lib/nelua/lualib/nelua/runner.lua:261>
[C]: in function 'xpcall'
/usr/local/lib/nelua/lualib/nelua/utils/except.lua:135: in function 'nelua.utils.except.try'
/usr/local/lib/nelua/lualib/nelua/runner.lua:261: in function 'nelua.runner.run'
/usr/local/lib/nelua/lualib/nelua.lua:4: in main chunk
[C]: in function 'require'
[C]: in ?
stack traceback:
[C]: in function 'error'
/usr/local/lib/nelua/lualib/nelua/utils/except.lua:108: in function 'nelua.utils.except.reraise'
/usr/local/lib/nelua/lualib/nelua/utils/except.lua:146: in function 'nelua.utils.except.try'
/usr/local/lib/nelua/lualib/nelua/runner.lua:261: in function 'nelua.runner.run'
/usr/local/lib/nelua/lualib/nelua.lua:4: in main chunk
[C]: in function 'require'
[C]: in ?
Code example
local State = @record{
acc: [4]uint64,
buffer: [32]uint8,
buffered_size: uint32,
}
function State:consume_long(input: pointer, len: isize): pointer
assert(self.acc ~= nil)
return input
end
function State:update(input: pointer, len: isize)
do
if self.buffered_size > 0 then
self:consume_long(&self.buffer, #self.buffer)
end
end
end
local fart: State
local data = "i am the egg man"
fart:update(&data, #data)
Expected behavior
A runtime assertion to be in the program, or, an intentional error from the compiler that this function does not exist.
Workaround
Removing the assert statement.
Accidentally discovered this one during a two-week Nelua challenge. Minimized with picire (delta debugger.)
Bug description
An assert statement which is not in a preprocessor line causes the compiler to crash internally.
Code example
Expected behavior
A runtime assertion to be in the program, or, an intentional error from the compiler that this function does not exist.
Workaround
Removing the assert statement.