[fpc-pascal] 2 bugs ???
Yann Bat
batyann811 at gmail.com
Wed Sep 7 16:36:59 CEST 2011
Hi,
I am trying to learn freepascal generics and I think that I have found 2 bugs.
Tested with FPC 2.4.4 Linux x86
==================
= BUG 1 - with SizeOf =
==================
program SizeOfBug;
{$mode objfpc}{$H+}
type
generic TGen<_T> = class(TObject)
private
FField: _T;
public
constructor Create(Val: _T);
function Bug: Integer;
end;
{--- TGen.Create ---}
constructor TGen.Create(Val: _T);
begin
inherited Create;
FField := Val;
end;
{--- TGen.Bug ---}
function TGen.Bug : Integer;
begin
Result := 100000 div SizeOf(_T); // *** DIVISION BY ZERO ***
// THE FOLLOWING CODE IS OK !
//
// var
// S: Integer;
// begin
// S := SizeOf(_T);
// Result := 100000 div S;
end;
type
TGenInt = specialize TGen<Integer>;
var
V: TGenInt;
begin
V.Create(589);
WriteLn('V.Bug = ', V.Bug);
V.Free;
end.
==================
= BUG 2 - with WriteLn =
==================
program WriteLnBug;
{$mode objfpc}{$H+}
type
generic TGen<_T> = class(TObject)
private
FField: _T;
public
constructor Create(Val: _T);
procedure Bug;
end;
{--- TGen.Create ---}
constructor TGen.Create(Val: _T);
begin
inherited Create;
FField := Val;
end;
{--- TGen.Bug ---}
procedure TGen.Bug;
begin
WriteLn('FField = ', FField); // *** CAN'T READ OR WRITE VARIABLES
OF THIS TYPE ***
end;
type
TGenInt = specialize TGen<Integer>;
var
V: TGenInt;
begin
V.Create(589);
V.Bug;
V.Free;
end.
More information about the fpc-pascal
mailing list