mirror of https://github.com/rusefi/lua.git
Wrong assertion in 'getbaseline'
The assertion cannot compute 'f->abslineinfo[i]' when the initial estimate 'i' is -1.
This commit is contained in:
parent
e7803f7dbc
commit
f5df7f91f7
5
ldebug.c
5
ldebug.c
|
@ -50,6 +50,8 @@ static int currentpc (CallInfo *ci) {
|
||||||
** an integer division gets the right place. When the source file has
|
** an integer division gets the right place. When the source file has
|
||||||
** large sequences of empty/comment lines, it may need extra entries,
|
** large sequences of empty/comment lines, it may need extra entries,
|
||||||
** so the original estimate needs a correction.
|
** so the original estimate needs a correction.
|
||||||
|
** If the original estimate is -1, the initial 'if' ensures that the
|
||||||
|
** 'while' will run at least once.
|
||||||
** The assertion that the estimate is a lower bound for the correct base
|
** The assertion that the estimate is a lower bound for the correct base
|
||||||
** is valid as long as the debug info has been generated with the same
|
** is valid as long as the debug info has been generated with the same
|
||||||
** value for MAXIWTHABS or smaller. (Previous releases use a little
|
** value for MAXIWTHABS or smaller. (Previous releases use a little
|
||||||
|
@ -63,7 +65,8 @@ static int getbaseline (const Proto *f, int pc, int *basepc) {
|
||||||
else {
|
else {
|
||||||
int i = cast_uint(pc) / MAXIWTHABS - 1; /* get an estimate */
|
int i = cast_uint(pc) / MAXIWTHABS - 1; /* get an estimate */
|
||||||
/* estimate must be a lower bond of the correct base */
|
/* estimate must be a lower bond of the correct base */
|
||||||
lua_assert(i < f->sizeabslineinfo && f->abslineinfo[i].pc <= pc);
|
lua_assert(i < 0 ||
|
||||||
|
(i < f->sizeabslineinfo && f->abslineinfo[i].pc <= pc));
|
||||||
while (i + 1 < f->sizeabslineinfo && pc >= f->abslineinfo[i + 1].pc)
|
while (i + 1 < f->sizeabslineinfo && pc >= f->abslineinfo[i + 1].pc)
|
||||||
i++; /* low estimate; adjust it */
|
i++; /* low estimate; adjust it */
|
||||||
*basepc = f->abslineinfo[i].pc;
|
*basepc = f->abslineinfo[i].pc;
|
||||||
|
|
|
@ -420,6 +420,14 @@ if not b then
|
||||||
end
|
end
|
||||||
end]], 5)
|
end]], 5)
|
||||||
|
|
||||||
|
do
|
||||||
|
-- Force a negative estimate for base line. Error in instruction 2
|
||||||
|
-- (after VARARGPREP, GETGLOBAL), with first absolute line information
|
||||||
|
-- (forced by too many lines) in instruction 0.
|
||||||
|
local s = string.format("%s return __A.x", string.rep("\n", 300))
|
||||||
|
lineerror(s, 301)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
if not _soft then
|
if not _soft then
|
||||||
-- several tests that exaust the Lua stack
|
-- several tests that exaust the Lua stack
|
||||||
|
|
Loading…
Reference in New Issue