2014-04-15 17:21 GMT+08:00 Sven Barth <pascaldra...@googlemail.com>: > Am 15.04.2014 08:47 schrieb "Xiangrong Fang" <xrf...@gmail.com>: > > It's good to know that it works, at least in 2.7.1. I will report the > problem again while I start using 2.7.1 or when it is released as 2.8 :-) > > That's the point: I don't know wether it compiles in 2.7.1 as I did not > test it. If you could provide a minimal sample (which fails in 2.6.2) and > report that as a bug I could ensure that 2.7.1 works correctly there. >
I cannot replicate the problem using a minimal program, because it gives out different error message. The following minimal program compiles OK: program vectr; type generic TGeneric1<T> = class end; generic TGeneric2<T> = class end; TSpec1 = specialize TGeneric1<Integer>; TSpec2 = specialize TGeneric2<TSpec1>; begin end. While the following program generate different error: program vectr; uses treap, vector; type TNodeHash = specialize TTreap<Integer, string>; TNodeVector = class(specialize TVector<TNodeHash>) protected function OnSort(v1, v2: T): Integer; override; end; operator <(nh1, nh2: TNodeHash): Boolean; begin Result := nh1.Count < nh2.Count; end; operator >(nh1, nh2: TNodeHash): Boolean; begin Result := nh1.Count > nh2.Count; end; function TNodeVector.OnSort(v1, v2: T): Integer; begin Result := 0; end; begin end. gives error message: vector.pas(149,9) Error: Operator is not overloaded: "TTreap$LongInt$AnsiString" < "TTreap$LongInt$AnsiString" vector.pas(151,14) Error: Operator is not overloaded: "TTreap$LongInt$AnsiString" > "TTreap$LongInt$AnsiString" vectr.lpr(28) Fatal: There were 2 errors compiling module, stopping The two used units can be downloaded here: https://github.com/xrfang/fpcollection/ While in my real program, I have this: type TCmhWaves = specialize TVector<TCmhWave>; The thing is, even if I do NOT use this definition at all, it still crashes the compiler. By "crash" I mean I get this from lazarus: Compiling wmodel.lError: /usr/bin/ppcx64 can't be executed, error message: Failed to execute "/usr/bin/ppcx64", error code: -139 TCmhWave is a specialized subclass of My TTreap class (also on github), it does NOT overload the < and > operators either. So my question is: 1) why my simplified example still require overloaded operator, although I have already done so? 2) If this is the cause of error (TCmhWave does not have these operators defined), why the compiler returns error code: -139 instead of more detailed errors? BTW, on my first attempt to debug this problem in lazbuild (command line) I get some error related to VMA, but unfortunately I forgot what it is and cannot get it shown again. Is there any way to customize the lazbuild by some switches to let it output more messages? Thanks.
xrfang@OP380:~/Sync/wmodel$ lazbuild wmodel.lpi primary config path: /home/xrfang/.lazarus TPkgManager.CheckCompileNeedDueToDependencies State file of LCL 1.2.0.3 is newer than state file of Package: cairocanvas_pkg 0.0 TLazPackageGraph.CheckIfPackageNeedsCompilation normal output dir is not writable: /usr/share/lazarus/1.2.0/components/cairocanvas/lib/x86_64-linux/gtk2/ TLazPackageGraph.GetFallbackOutputDir cairocanvas_pkg: /home/xrfang/.lazarus/lib/cairocanvas_pkg/lib/x86_64-linux/gtk2 TParsedCompilerOptions.SetOutputDirectoryOverride New=/home/xrfang/.lazarus/lib/cairocanvas_pkg/lib/x86_64-linux/gtk2 TLazPackageGraph.CheckIfCurPkgOutDirNeedsCompile Compiler params changed for Printer4Lazarus 0.5 Old=" -MObjFPC -Scgi -O1 -g -gl -vewnhi -Fi/usr/share/lazarus/1.2.0/components/printers/unix -Fi/usr/share/lazarus/1.2.0/components/printers/win32 -Fi/usr/share/lazarus/1.2.0/components/printers/carbon -Fi/usr/share/lazarus/1.2.0/components/printers/qt -Fu/usr/share/lazarus/1.2.0/components/printers/unix -Fu/usr/share/lazarus/1.2.0/components/printers/win32 -Fu/usr/share/lazarus/1.2.0/components/printers/carbon -Fu/usr/share/lazarus/1.2.0/components/printers/qt -Fu/usr/share/lazarus/1.2.0/packager/units/x86_64-linux -Fu/usr/share/lazarus/1.2.0/components/lazutils/lib/x86_64-linux -Fu/usr/share/lazarus/1.2.0/lcl/units/x86_64-linux -Fu/usr/share/lazarus/1.2.0/lcl/units/x86_64-linux/gtk2 -Fu/usr/share/lazarus/1.2.0/components/cairocanvas/lib/x86_64-linux/gtk2 -Fu/usr/share/lazarus/1.2.0/components/printers/ -FU/usr/share/lazarus/1.2.0/components/printers/lib/x86_64-linux/gtk2/ -l -dLCL -dLCLgtk2 -dUseCache -dNativePrint -dUSEUNICODE printer4lazarus.pas" Now=" -MObjFPC -Scgi -O1 -g -gl -vewnhi -Fi/usr/share/lazarus/1.2.0/components/printers/unix -Fi/usr/share/lazarus/1.2.0/components/printers/win32 -Fi/usr/share/lazarus/1.2.0/components/printers/carbon -Fi/usr/share/lazarus/1.2.0/components/printers/qt -Fu/usr/share/lazarus/1.2.0/components/printers/unix -Fu/usr/share/lazarus/1.2.0/components/printers/win32 -Fu/usr/share/lazarus/1.2.0/components/printers/carbon -Fu/usr/share/lazarus/1.2.0/components/printers/qt -Fu/usr/share/lazarus/1.2.0/packager/units/x86_64-linux -Fu/usr/share/lazarus/1.2.0/components/lazutils/lib/x86_64-linux -Fu/usr/share/lazarus/1.2.0/lcl/units/x86_64-linux -Fu/usr/share/lazarus/1.2.0/lcl/units/x86_64-linux/gtk2 -Fu/home/xrfang/.lazarus/lib/cairocanvas_pkg/lib/x86_64-linux/gtk2 -Fu/usr/share/lazarus/1.2.0/components/printers/ -FU/usr/share/lazarus/1.2.0/components/printers/lib/x86_64-linux/gtk2/ -l -dLCL -dLCLgtk2 -dUseCache -dNativePrint -dUSEUNICODE printer4lazarus.pas" State file="/usr/share/lazarus/1.2.0/components/printers/lib/x86_64-linux/gtk2/Printer4Lazarus.compiled" TLazPackageGraph.CheckIfPackageNeedsCompilation normal output dir is not writable: /usr/share/lazarus/1.2.0/components/printers/lib/x86_64-linux/gtk2/ TLazPackageGraph.GetFallbackOutputDir Printer4Lazarus: /home/xrfang/.lazarus/lib/Printer4Lazarus/lib/x86_64-linux/gtk2 TParsedCompilerOptions.SetOutputDirectoryOverride New=/home/xrfang/.lazarus/lib/Printer4Lazarus/lib/x86_64-linux/gtk2 TBuildManager.CheckIfProjectNeedsCompilation Compile was incomplete for Project [TExternalToolList.Run] CmdLine="/home/xrfang/Sync/wmodel/gitrev.exe" WorkDir="/home/xrfang/Sync/wmodel/" "Executing command before" completed TCompiler.Compile WorkingDir="/home/xrfang/Sync/wmodel/" CompilerFilename="/usr/bin/fpc" CompilerParams=" -MObjFPC -Scghi -O1 -g -gl -vewnhi -Fi/home/xrfang/wmodel/lib/x86_64-linux -Fl/opt/gnome/lib -Fu/home/xrfang/git/fpcollection/src/units -Fu/home/xrfang/.lazarus/lib/Printer4Lazarus/lib/x86_64-linux/gtk2 -Fu/home/xrfang/.lazarus/lib/cairocanvas_pkg/lib/x86_64-linux/gtk2 -Fu/usr/share/lazarus/1.2.0/lcl/units/x86_64-linux/gtk2 -Fu/usr/share/lazarus/1.2.0/lcl/units/x86_64-linux -Fu/usr/share/lazarus/1.2.0/components/lazutils/lib/x86_64-linux -Fu/usr/share/lazarus/1.2.0/packager/units/x86_64-linux -Fu/home/xrfang/Sync/wmodel/ -FU/home/xrfang/wmodel/lib/x86_64-linux/ -l -FE/home/xrfang/wmodel/ -dLCL -dLCLgtk2 wmodel.lpr" [TCompiler.Compile] CmdLine="/usr/bin/fpc -MObjFPC -Scghi -O1 -g -gl -vewnhi -Fi/home/xrfang/wmodel/lib/x86_64-linux -Fl/opt/gnome/lib -Fu/home/xrfang/git/fpcollection/src/units -Fu/home/xrfang/.lazarus/lib/Printer4Lazarus/lib/x86_64-linux/gtk2 -Fu/home/xrfang/.lazarus/lib/cairocanvas_pkg/lib/x86_64-linux/gtk2 -Fu/usr/share/lazarus/1.2.0/lcl/units/x86_64-linux/gtk2 -Fu/usr/share/lazarus/1.2.0/lcl/units/x86_64-linux -Fu/usr/share/lazarus/1.2.0/components/lazutils/lib/x86_64-linux -Fu/usr/share/lazarus/1.2.0/packager/units/x86_64-linux -Fu/home/xrfang/Sync/wmodel/ -FU/home/xrfang/wmodel/lib/x86_64-linux/ -l -FE/home/xrfang/wmodel/ -dLCL -dLCLgtk2 wmodel.lpr" Hint: Start of reading config file /etc/fpc.cfg Hint: End of reading config file /etc/fpc.cfg Free Pascal Compiler version 2.6.2-5 [2013/07/25] for x86_64 Copyright (c) 1993-2012 by Florian Klaempfl and others Target OS: Linux for x86-64 Compiling wmodel.lError: /usr/bin/ppcx64 can't be executed, error message: Failed to execute "/usr/bin/ppcx64", error code: -139 ERROR: failed compiling of project /home/xrfang/Sync/wmodel/wmodel.lpi xrfang@OP380:~/Sync/wmodel$
_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal