Ostatnio zacząłem dosyć sporo poprawiać w moim kompilatorze (na ten moment jestem w trakcie kończenia implementacji control-flow graph i paru innych rzeczy ;>) i zauważyłem, że im więcej kodu dodaję, tym częściej FPC się crashuje - aktualnie wygląda to tak, że jeżeli nie wykonam czystej całkowitej kompilacji (Lazarusowe Shift+F9), kończy się to komunikatem Compilation aborted
Ręczne wywołanie z konsoli:
ppc386 compiler.lpr -Fututajjestmasaścieżek -FUlib\ -Mobjfpc
Ujawnia:
Free Pascal Compiler version 2.6.3 [2013/06/21] for i386
Copyright (c) 1993-2012 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling compiler.lpr
Compiling CompilerUnit.pas
Compiling .\compiler\cfgraph.pas
Compiling .\compiler\symdef.pas
Compiling .\compiler\parser.pas
Compiling Opcodes.pas
Compiling .\compiler\Compile1.pas
Compiling .\compiler\Compile1.pas
Compiling .\compiler\Compile1.pas
Compiling .\compiler\Compile1.pas
Compiling .\compiler\Compile1.pas
Compiling .\compiler\Compile1.pas
Compiling .\compiler\Compile1.pas
Compiling .\compiler\Compile1.pas
Compiling .\compiler\Compile1.pas
Compiling .\compiler\Compile1.pas
Compiling .\compiler\Compile1.pas
Compiling .\compiler\Compile1.pas
Compiling .\compiler\Compile1.pas
Compiling .\compiler\Compile1.pas
Compiling Compile2.pas
Compile1.pas(632,45) Warning: Comment level 2 found
Compile1.pas(633,3) Warning: Comment level 2 found
Compile1.pas(1116,2) Warning: Comment level 2 found
Fatal: Compilation aborted
An unhandled exception occurred at $00462D10 :
EAccessViolation : Access violation
$00462D10 TSTOREDDEF__IS_INTREGABLE, line 1348 of symdef.pas
$0045748E TABSTRACTVARSYM__SETVARDEF, line 1196 of symsym.pas
$00457187 TABSTRACTVARSYM__DEREF, line 1064 of symsym.pas
$00457A81 TABSTRACTNORMALVARSYM__DEREF, line 1311 of symsym.pas
$00436D80 TSTOREDSYMTABLE__DEREF, line 570 of symtable.pas
$0046743D TABSTRACTPROCDEF__DEREF, line 3243 of symdef.pas
$00436D24 TSTOREDSYMTABLE__DEREF, line 563 of symtable.pas
$0046B218 TOBJECTDEF__DEREF, line 4664 of symdef.pas
$00436D24 TSTOREDSYMTABLE__DEREF, line 563 of symtable.pas
$0043935F TSTATICSYMTABLE__PPULOAD, line 1485 of symtable.pas
$0052A555 TPPUMODULE__LOAD_USEDUNITS, line 1403 of fppu.pas
$0052AB25 TPPUMODULE__LOADPPU, line 1599 of fppu.pas
$0052A1AD TPPUMODULE__LOAD_USEDUNITS, line 1312 of fppu.pas
$0052AB25 TPPUMODULE__LOADPPU, line 1599 of fppu.pas
$0053356C LOADUNITS, line 815 of pmodules.pas
$005337C6 PARSE_IMPLEMENTATION_USES, line 877 of pmodules.pas
$005345CD PROC_UNIT, line 1249 of pmodules.pas
(czysta (pierwsza) kompilacja (gdy katalog wyjściowy lib/
jest pusty) zawsze przechodzi ok, dopiero, gdy zaczyna wczytywać pliki *.ppu
następuje crash)
Błąd występuje we wszystkich trzech wersjach, które sprawdzałem, tj.: 2.6.2, 2.6.3 i 2.7.1 (ostatnie dwie kompilowałem lokalnie u siebie prosto z dzisiejszego repo FPC).
Niezbyt jestem w stanie zgłosić ten błąd (ponieważ nie istnieje w mniejszej skali...), niezbyt jestem w stanie to poprawić, a poważnie utrudnia mi on dalsze pisanie - rekompilowanie za każdym razem całości jednak trochę trwa, stąd tutaj moje pytanie: co teraz powinienem zrobić (tzn.poza czekaniem na naprawę tego bugu, przyjmując, że team FPC o nim wie :P)?
Staram się odnaleźć mimo wszystko dokładniejszy powód błędu oraz ręcznie grzebać w kodzie Free Pascala, lecz póki co bezowocnie ;C
@-123oho, masterze FPC, oraz wszyscy inni: liczę, że pomożecie ;>
Btw, jakby co, to jestem w stanie podesłać ten aktualny kod, który crashuje kompilator (nie zacommitowałem go na GitHuba póki co).