[fpc-devel] Fatal: Internal error 200111022

Michael Van Canneyt michael at freepascal.org
Wed Oct 20 13:37:18 CEST 2010



On Wed, 20 Oct 2010, Birger Jansen wrote:

> Hi Michael,
>
> Yes, TSub.Count should be used. I agree that it is dirty and confusing. Best would be to only have it work in Delphi mode.


Hi,

Can you please enter a bug-report for this, and simply mention these facts ?
- Fix as suggested in Delphi mode
- Prohibit in ObjFPC mode ?

So it won't be forgotten.

Michael.
>
> Kind regards,
>  Birger
>
>
> -----Oorspronkelijk bericht-----
> Van: Michael Van Canneyt <michael at freepascal.org>
> Verzonden: wo 20-10-2010 13:22
> Aan: FPC developers' list <fpc-devel at lists.freepascal.org>;
> Onderwerp: Re: [fpc-devel] Fatal: Internal error 200111022
>
>>
>> Hello,
>>
>> Which 'Count' should the compiler select ? I suspect TSub.Count ?
>>
>> I think we should prohibit this dubious construct in ObjFC mode.
>> (but try to be delphi compatible in Delphi mode)
>>
>> Michael.
>>
>> On Wed, 20 Oct 2010, Birger Jansen wrote:
>>
>>> I'm not sure if this is the correct way to report this, please correct me if
>> I should report in another way.
>>>
>>> I found an old conversation between Leonardo and Florian about the Fatail
>> internal error 200111022. The thread concluded that they could not reproduce
>> the error.
>>>
>>> I got this error while converting a large project from Delphi to FPC. It
>> turns out that a base class has a property Count, and a derived class has a
>> function with the same name Count. This will compile, untill you call the
>> property or function Count.
>>>
>>> I created an example that should explain it. Uncomment the marked line to get
>> the fatal internal error:
>>>
>>> program project1;
>>>
>>> {$mode objfpc}{$H+}
>>>
>>> uses
>>>  {$IFDEF UNIX}{$IFDEF UseCThreads}
>>>  cthreads,
>>>  {$ENDIF}{$ENDIF}
>>>  Classes;
>>>
>>> type
>>>
>>>  TBase = class
>>>  private
>>>    function GetCount: Integer;
>>>  public
>>>    property Count: Integer read GetCount;
>>>  end;
>>>
>>>  TSub = class(TBase)
>>>  public
>>>    function Count: Integer; overload;
>>>  end;
>>>
>>> function TSub.Count: Integer;
>>> begin
>>>  Result := 0;
>>> end;
>>>
>>> { TBase }
>>>
>>> function TBase.GetCount: Integer;
>>> begin
>>>  Result := 0;
>>> end;
>>>
>>> var
>>>  MySub: TSub;
>>>  i : Integer;
>>> begin
>>>  MySub := TSub.Create;
>>> // uncomment the next line for Fatal Internal error 200111022:
>>> //  for i := 0 to MySub.Count do begin end;
>>> end.
>>> _______________________________________________
>>> fpc-devel maillist  -  fpc-devel at lists.freepascal.org
>>> http://lists.freepascal.org/mailman/listinfo/fpc-devel
>>>
>> _______________________________________________
>> fpc-devel maillist  -  fpc-devel at lists.freepascal.org
>> http://lists.freepascal.org/mailman/listinfo/fpc-devel
>>
> _______________________________________________
> fpc-devel maillist  -  fpc-devel at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-devel
>



More information about the fpc-devel mailing list