[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