Trunk corruption inside packages/fcl-res
Summary
By compiling packages using:
External command "/home/muller/pas/fpc-3.3.1-64/bin/ppcx64 -Tlinux -FUfcl-res/units/x86_64-linux/ -Fu/home/muller/pas/gitlab-fpc-source/rtl/units/x86_64-linux/ -Fu/home/muller/pas/gitlab-fpc-source/packages/rtl-objpas/units/x86_64-linux/ -Fu/home/muller/pas/gitlab-fpc-source/packages/fcl-base/units/x86_64-linux/ -Fu/home/muller/pas/gitlab-fpc-source/packages/pthreads/units/x86_64-linux/ -Fu/home/muller/pas/gitlab-fpc-source/packages/tplylib/units/x86_64-linux/ -Fifcl-res/src -Fl/usr/lib/gcc/x86_64-linux-gnu/10 -Cg -Fl/usr/lib/gcc/x86_64-linux-gnu/10 -n -gl -dx86_64 -Sc -viq fcl-res/src/groupresource.pp" failed with exit code 256. Console output:
Target OS: Linux for x86-64
Compiling fcl-res/src/groupresource.pp
Compiling ./fcl-res/src/resource.pp
Compiling ./fcl-res/src/resmerger.pp
Compiling ./fcl-res/src/groupcursorresource.pp
groupresource.pp(76,17) Error: There is no method in an ancestor class to be overridden: "constructor Create(TStream;TAbstractResource;Int64);"
groupresource.pp(81,1) Fatal: There were 1 errors compiling module, stopping
Fatal: Compilation aborted
System Information
-
Operating system: Many (see All check-all-rtl.sh script failing targets in gcc202 column
All failing entries which give the same
There is no method in an ancestor class to be overridden
error, for instancei386-linux
andx86_64-linux
- Processor architecture: Also several (see link above)
- Compiler version: trunk
- Device:
Steps to reproduce
At fpcsrc
level, simply use:
make distclean
make rtl packages OPT="-n" DISABLE_FPMAKE_BUILD_UNIT=1
The DISABLE_FPMAKE_BUILD_UNIT=1
Makefile variable just changes fpmake
behavior to try to compile each unit for a package sequencially instead of generating a BuildUnit
.
What is the current bug behavior?
Leads to the error given above.
What is the expected (correct) behavior?
Should compile successfully as when DISABLE_FPMAKE_BUILD_UNIT=1
is omitted.
Explanation
Using gdb
, one can show that the error is due to the fact that
the VMT entry for the inherited virtual Create
constructor
has a corrupted entry for the second parameter, aResource
,
which type is wrong:
(gdb) bt
#0 COMPARE_PARAS (PARA1=0xf6853f70, PARA2=0xf68c09f0, ACP=CP_NONE, CPOPTIONS=...) at defcmp.pas:2364
#1 0x08232882 in FOUND_ENTRY (VMTPD=0xf68336a0, VMTENTRYVIS=VIS_PUBLIC, UPDATEVALUES=true, parentfp=0xffffbc98) at nobj.pas:216
#2 0x082325d3 in TVMTBUILDER__IS_NEW_VMT_ENTRY (PD=0xf683da80, OVERRIDESCLASSHELPER=false, this=0xf68c06b0) at nobj.pas:489
#3 0x08234695 in TVMTBUILDER__BUILD (this=0xf68c06b0) at nobj.pas:913
#4 0x08234917 in BUILD_VMT (DEF=0xf698c4d0) at nobj.pas:984
#5 0x0825d615 in TYPES_DEC (IN_STRUCTURE=false, HAD_GENERIC=false, RTTI_ATTRS_DEF=0x0) at pdecl.pas:1140
#6 0x0825db57 in TYPE_DEC (HAD_GENERIC=false) at pdecl.pas:1253
#7 0x082573ff in READ_INTERFACE_DECLARATIONS () at psub.pas:3262
#8 0x0831c416 in PARSE_UNIT_INTERFACE_DECLARATIONS (CURR=0xf7fe47d0) at pmodules.pas:1265
#9 0x08115bc8 in TTASK_HANDLER__CONTINUE (T=0xf7fd2930, this=0xf7fd28f0) at ctask.pas:277
#10 0x08115d5b in TTASK_HANDLER__PROCESSQUEUE (this=0xf7fd28f0) at ctask.pas:348
#11 0x0807da2d in COMPILE (CMD=0x0) at compiler.pas:311
#12 0x0804833a in main () at pp.pas:306
(gdb) p CURRPARA1^
warning: can't find linker symbol for virtual table for `TPARAVARSYM' value
$11 = {<TABSTRACTNORMALVARSYM> = {<TABSTRACTVARSYM> = {<TSTOREDSYM> = {<TSYM> = {<TSYMENTRY> = {<TFPHASHOBJECT> = {<TOBJECT> = {_MONITORDATA = 0x0, _vptr$ = {0x85420b0, 0x0}},
FOWNER = 0xf67e8650, FSTRINDEX = 8}, FREALNAME = 0xf69d2740 'aResource', TYP = PARAVARSYM, SYMID = 22, OWNER = 0xf67ff4b0}, FILEINFO = {LINE = 43, COLUMN = 43, FILEINDEX = 1,
MODULEINDEX = 7}, VISIBILITY = VIS_PUBLIC, ISDBGWRITTEN = false, SYMOPTIONS = [], REFS = 0, REFLIST = 0x0, DEPRECATEDMSG = 0x0}, RTTI_ATTRIBUTE_LIST = 0x0}, VAROPTIONS = [],
VARSPEZ = VS_VALUE, VARREGABLE = VR_INTREG, VARSTATE = VS_INITIALISED, VARSYMACCESS = [], _VARDEF = 0xf698b210, VARDEFDEREF = {DATAIDX = 213}}, DEFAULTCONSTSYM = 0x0,
DEFAULTCONSTSYMDEREF = {DATAIDX = 222}, LOCALLOC = {LOC = LOC_INVALID, SIZE = OS_NO, RESFLAGS = F_E, VALUE = 0, VALUE64 = 0, REFERENCE = {OFFSET = 0, SYMBOL = 0x0, RELSYMBOL = 0x0,
TEMPPOS = {VAL = 0}, SEGMENT = 0, BASE = 0, INDEX = 0, REFADDR = ADDR_NO, SCALEFACTOR = 0, VOLATILITY = [], ALIGNMENT = 0}, REGISTER = 0, REGISTERHI = 0, REGISTER64 = {REGLO = 0,
REGHI = 0}, SREG = {SUBSETREG = 0, STARTBIT = 0, BITLEN = 0, SUBSETREGSIZE = OS_NO}, SREF = {REF = {OFFSET = 0, SYMBOL = 0x0, RELSYMBOL = 0x0, TEMPPOS = {VAL = 0}, SEGMENT = 0,
BASE = 0, INDEX = 0, REFADDR = ADDR_NO, SCALEFACTOR = 0, VOLATILITY = [], ALIGNMENT = 0}, BITINDEXREG = 0, STARTBIT = 0, BITLEN = 0}, TRUELABEL = 0x0, FALSELABEL = 0x0},
INITIALLOC = {LOC = LOC_INVALID, SIZE = OS_NO, RESFLAGS = F_E, VALUE = 0, VALUE64 = 0, REFERENCE = {OFFSET = 0, SYMBOL = 0x0, RELSYMBOL = 0x0, TEMPPOS = {VAL = 0}, SEGMENT = 0,
BASE = 0, INDEX = 0, REFADDR = ADDR_NO, SCALEFACTOR = 0, VOLATILITY = [], ALIGNMENT = 0}, REGISTER = 0, REGISTERHI = 0, REGISTER64 = {REGLO = 0, REGHI = 0}, SREG = {SUBSETREG = 0,
STARTBIT = 0, BITLEN = 0, SUBSETREGSIZE = OS_NO}, SREF = {REF = {OFFSET = 0, SYMBOL = 0x0, RELSYMBOL = 0x0, TEMPPOS = {VAL = 0}, SEGMENT = 0, BASE = 0, INDEX = 0,
REFADDR = ADDR_NO, SCALEFACTOR = 0, VOLATILITY = [], ALIGNMENT = 0}, BITINDEXREG = 0, STARTBIT = 0, BITLEN = 0}, TRUELABEL = 0x0, FALSELABEL = 0x0}, INPARENTFPSTRUCT = false,
NOREGVARINITNEEDED = false, CAPTURE_SYM = 0x0}, PARALOC = {{DEF = 0x0, LOCATION = 0x0, INTSIZE = 0, DEFDEREF = {DATAIDX = 0}, ALIGNMENT = 0, SIZE = OS_NO, TEMPORARY = false, _vptr$ = {
0x84af2c0, 0x0}}, {DEF = 0x0, LOCATION = 0x0, INTSIZE = 0, DEFDEREF = {DATAIDX = 0}, ALIGNMENT = 0, SIZE = OS_NO, TEMPORARY = false, _vptr$ = {0x84af2c0, 0x0}}}, PARANR = 20,
UNIVPARA = false}
(gdb) p CURRPARA2^
warning: can't find linker symbol for virtual table for `TPARAVARSYM' value
$12 = {<TABSTRACTNORMALVARSYM> = {<TABSTRACTVARSYM> = {<TSTOREDSYM> = {<TSYM> = {<TSYMENTRY> = {<TFPHASHOBJECT> = {<TOBJECT> = {_MONITORDATA = 0x0, _vptr$ = {0x85420b0, 0x0}},
FOWNER = 0xf68c0950, FSTRINDEX = 8}, FREALNAME = 0xf68d6700 'aResource', TYP = PARAVARSYM, SYMID = -2, OWNER = 0xf66e73e0}, FILEINFO = {LINE = 76, COLUMN = 44, FILEINDEX = 1,
MODULEINDEX = 1}, VISIBILITY = VIS_PUBLIC, ISDBGWRITTEN = false, SYMOPTIONS = [], REFS = 0, REFLIST = 0x0, DEPRECATEDMSG = 0x0}, RTTI_ATTRIBUTE_LIST = 0x0}, VAROPTIONS = [],
VARSPEZ = VS_VALUE, VARREGABLE = VR_INTREG, VARSTATE = VS_INITIALISED, VARSYMACCESS = [], _VARDEF = 0xf698a6d0, VARDEFDEREF = {DATAIDX = -1}}, DEFAULTCONSTSYM = 0x0,
DEFAULTCONSTSYMDEREF = {DATAIDX = -1}, LOCALLOC = {LOC = LOC_INVALID, SIZE = OS_NO, RESFLAGS = F_E, VALUE = 0, VALUE64 = 0, REFERENCE = {OFFSET = 0, SYMBOL = 0x0, RELSYMBOL = 0x0,
TEMPPOS = {VAL = 0}, SEGMENT = 0, BASE = 0, INDEX = 0, REFADDR = ADDR_NO, SCALEFACTOR = 0, VOLATILITY = [], ALIGNMENT = 0}, REGISTER = 0, REGISTERHI = 0, REGISTER64 = {REGLO = 0,
REGHI = 0}, SREG = {SUBSETREG = 0, STARTBIT = 0, BITLEN = 0, SUBSETREGSIZE = OS_NO}, SREF = {REF = {OFFSET = 0, SYMBOL = 0x0, RELSYMBOL = 0x0, TEMPPOS = {VAL = 0}, SEGMENT = 0,
BASE = 0, INDEX = 0, REFADDR = ADDR_NO, SCALEFACTOR = 0, VOLATILITY = [], ALIGNMENT = 0}, BITINDEXREG = 0, STARTBIT = 0, BITLEN = 0}, TRUELABEL = 0x0, FALSELABEL = 0x0},
INITIALLOC = {LOC = LOC_INVALID, SIZE = OS_NO, RESFLAGS = F_E, VALUE = 0, VALUE64 = 0, REFERENCE = {OFFSET = 0, SYMBOL = 0x0, RELSYMBOL = 0x0, TEMPPOS = {VAL = 0}, SEGMENT = 0,
BASE = 0, INDEX = 0, REFADDR = ADDR_NO, SCALEFACTOR = 0, VOLATILITY = [], ALIGNMENT = 0}, REGISTER = 0, REGISTERHI = 0, REGISTER64 = {REGLO = 0, REGHI = 0}, SREG = {SUBSETREG = 0,
STARTBIT = 0, BITLEN = 0, SUBSETREGSIZE = OS_NO}, SREF = {REF = {OFFSET = 0, SYMBOL = 0x0, RELSYMBOL = 0x0, TEMPPOS = {VAL = 0}, SEGMENT = 0, BASE = 0, INDEX = 0,
REFADDR = ADDR_NO, SCALEFACTOR = 0, VOLATILITY = [], ALIGNMENT = 0}, BITINDEXREG = 0, STARTBIT = 0, BITLEN = 0}, TRUELABEL = 0x0, FALSELABEL = 0x0}, INPARENTFPSTRUCT = false,
NOREGVARINITNEEDED = false, CAPTURE_SYM = 0x0}, PARALOC = {{DEF = 0x0, LOCATION = 0x0, INTSIZE = 0, DEFDEREF = {DATAIDX = 0}, ALIGNMENT = 0, SIZE = OS_NO, TEMPORARY = false, _vptr$ = {
0x84af2c0, 0x0}}, {DEF = 0x0, LOCATION = 0x0, INTSIZE = 0, DEFDEREF = {DATAIDX = 0}, ALIGNMENT = 0, SIZE = OS_NO, TEMPORARY = false, _vptr$ = {0x84af2c0, 0x0}}}, PARANR = 20,
UNIVPARA = false}
(gdb) p CURRPARA1^._VARDEF^.TYPESYM^
warning: can't find linker symbol for virtual table for `TPARAVARSYM' value
warning: can't find linker symbol for virtual table for `TDEF' value
warning: can't find linker symbol for virtual table for `TSYM' value
$13 = {<TSYMENTRY> = {<TFPHASHOBJECT> = {<TOBJECT> = {_MONITORDATA = 0x0, _vptr$ = {0x8541ea0, 0x0}}, FOWNER = 0xf691c2b0, FSTRINDEX = 939},
FREALNAME = 0xf691c8f0 'EResourceReaderException', TYP = TYPESYM, SYMID = 288, OWNER = 0xf6954050}, FILEINFO = {LINE = 93, COLUMN = 30, FILEINDEX = 1, MODULEINDEX = 6},
VISIBILITY = VIS_PUBLIC, ISDBGWRITTEN = false, SYMOPTIONS = [], REFS = 3, REFLIST = 0x0, DEPRECATEDMSG = 0x0}
(gdb) p CURRPARA2^._VARDEF^.TYPESYM^
warning: can't find linker symbol for virtual table for `TPARAVARSYM' value
warning: can't find linker symbol for virtual table for `TDEF' value
warning: can't find linker symbol for virtual table for `TSYM' value
$14 = {<TSYMENTRY> = {<TFPHASHOBJECT> = {<TOBJECT> = {_MONITORDATA = 0x0, _vptr$ = {0x8541ea0, 0x0}}, FOWNER = 0xf691c2b0, FSTRINDEX = 1137}, FREALNAME = 0xf67e3bb0 'TAbstractResource',
TYP = TYPESYM, SYMID = 462, OWNER = 0xf6954050}, FILEINFO = {LINE = 103, COLUMN = 23, FILEINDEX = 1, MODULEINDEX = 6}, VISIBILITY = VIS_PUBLIC, ISDBGWRITTEN = false, SYMOPTIONS = [],
REFS = 39, REFLIST = 0x0, DEPRECATEDMSG = 0x0}
The two TYPESYM
fields should be equal!