Skip to content

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 instance i386-linux and x86_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=1is 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!

To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information