|
@@ -0,0 +1,90 @@
|
|
|
+program inline_bug;
|
|
|
+
|
|
|
+{$MODE objfpc}
|
|
|
+
|
|
|
+{ bug is only triggered when inlining is on }
|
|
|
+{$INLINE on}
|
|
|
+
|
|
|
+{
|
|
|
+
|
|
|
+[nickysn@dhcppc1 inline_bug]$ fpc inline_bug
|
|
|
+Free Pascal Compiler version 3.2.0 [2020/06/21] for x86_64
|
|
|
+Copyright (c) 1993-2020 by Florian Klaempfl and others
|
|
|
+Target OS: Linux for x86-64
|
|
|
+Compiling inline_bug.pas
|
|
|
+Linking inline_bug
|
|
|
+/usr/bin/ld: inline_bug.o: in function `P$INLINE_BUG$_$TMODULE_$__$$_DOSTUFF':
|
|
|
+inline_bug.pas:(.text.n_p$inline_bug$_$tmodule_$__$$_dostuff+0x59): undefined reference to `.Lj62'
|
|
|
+inline_bug.pas(69,1) Error: Error while linking
|
|
|
+inline_bug.pas(69,1) Fatal: There were 1 errors compiling module, stopping
|
|
|
+Fatal: Compilation aborted
|
|
|
+Error: /usr/bin/ppcx64 returned an error exitcode
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+type
|
|
|
+ TSample = class
|
|
|
+ private
|
|
|
+ function GetContainsData: Boolean; inline;
|
|
|
+ public
|
|
|
+ property ContainsData: Boolean read GetContainsData;
|
|
|
+ end;
|
|
|
+ TSampleList = class
|
|
|
+ private
|
|
|
+ FSampleList: array [1..10] of TSample;
|
|
|
+ function GetSample(Index: Integer): TSample; inline;
|
|
|
+ public
|
|
|
+ constructor Create;
|
|
|
+ property Sample[Index: Integer]: TSample read GetSample; default;
|
|
|
+ end;
|
|
|
+ TModule = class
|
|
|
+ private
|
|
|
+ FSamples: TSampleList;
|
|
|
+ public
|
|
|
+ constructor Create;
|
|
|
+ procedure DoStuff;
|
|
|
+ end;
|
|
|
+
|
|
|
+function TSample.GetContainsData: Boolean; inline;
|
|
|
+begin
|
|
|
+ Result := False;
|
|
|
+end;
|
|
|
+
|
|
|
+constructor TSampleList.Create;
|
|
|
+var
|
|
|
+ I: Integer;
|
|
|
+begin
|
|
|
+ for I := 1 to 10 do
|
|
|
+ FSampleList[I] := TSample.Create;
|
|
|
+end;
|
|
|
+
|
|
|
+function TSampleList.GetSample(Index: Integer): TSample; inline;
|
|
|
+begin
|
|
|
+ if (Index < Low(FSampleList)) or (Index > High(FSampleList)) then
|
|
|
+ raise TObject.Create;
|
|
|
+ Result := FSampleList[Index];
|
|
|
+end;
|
|
|
+
|
|
|
+constructor TModule.Create;
|
|
|
+begin
|
|
|
+ FSamples := TSampleList.Create;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TModule.DoStuff;
|
|
|
+var
|
|
|
+ I: Integer;
|
|
|
+begin
|
|
|
+ for I := 1 to 10 do
|
|
|
+ if FSamples[I].ContainsData then
|
|
|
+ begin
|
|
|
+ Writeln('!!!');
|
|
|
+ halt(1);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+var
|
|
|
+ Module: TModule;
|
|
|
+begin
|
|
|
+ Module := TModule.Create;
|
|
|
+ Module.DoStuff;
|
|
|
+end.
|