|
@@ -0,0 +1,78 @@
|
|
|
+program BugFPC;
|
|
|
+
|
|
|
+{$IFDEF FPC}
|
|
|
+{$MODE DELPHI}
|
|
|
+{$ENDIF FPC}
|
|
|
+
|
|
|
+uses
|
|
|
+ SysUtils;
|
|
|
+
|
|
|
+type
|
|
|
+ TBug = record
|
|
|
+
|
|
|
+ strict private
|
|
|
+
|
|
|
+ class constructor Bugger();
|
|
|
+
|
|
|
+ public
|
|
|
+ var
|
|
|
+ a: Int32;
|
|
|
+ st: string;
|
|
|
+ arr: TBytes;
|
|
|
+
|
|
|
+ class var
|
|
|
+
|
|
|
+ skim: TBug;
|
|
|
+
|
|
|
+ constructor Create(b: Int32);
|
|
|
+
|
|
|
+ end;
|
|
|
+
|
|
|
+ { TBug }
|
|
|
+
|
|
|
+class constructor TBug.Bugger;
|
|
|
+begin
|
|
|
+ skim := Default (TBug);
|
|
|
+ skim.a := 5;
|
|
|
+ skim.st := 'fish';
|
|
|
+ skim.arr := TBytes.Create(1, 2, 3);
|
|
|
+
|
|
|
+ Writeln(skim.a); // should be 5
|
|
|
+ Writeln(skim.st); // should be 'fish'
|
|
|
+ Writeln(Length(skim.arr)); // should be 3
|
|
|
+ if skim.a<>5 then
|
|
|
+ halt(1);
|
|
|
+ if skim.st<>'fish' then
|
|
|
+ halt(2);
|
|
|
+ if length(skim.arr)<>3 then
|
|
|
+ halt(3);
|
|
|
+end;
|
|
|
+
|
|
|
+constructor TBug.Create(b: Int32);
|
|
|
+var
|
|
|
+ temp: TBug;
|
|
|
+begin
|
|
|
+ temp := skim;
|
|
|
+ Writeln(temp.a); // should be 5
|
|
|
+ Writeln(temp.st); // should be 'fish' but got ''
|
|
|
+ Writeln(Length(skim.arr)); // should be 3 but got 0
|
|
|
+ if skim.a<>5 then
|
|
|
+ halt(4);
|
|
|
+ if skim.st<>'fish' then
|
|
|
+ halt(5);
|
|
|
+ if length(skim.arr)<>3 then
|
|
|
+ halt(6);
|
|
|
+end;
|
|
|
+
|
|
|
+begin
|
|
|
+ try
|
|
|
+ TBug.Create(9);
|
|
|
+ except
|
|
|
+ on E: Exception do
|
|
|
+ begin
|
|
|
+ Writeln(E.ClassName, ': ', E.Message);
|
|
|
+ halt(7);
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+
|
|
|
+end.
|