Delphi内联用法导致“ F2084内部错误”

时间:2018-08-10 16:31:26

标签: delphi inline

我实际上面临着一个柏林和东京Delphi编译器都出现的编译问题。当我调用内联函数时会发生这种情况,内联函数本身会调用READ函数也已内联的属性... 这是导致致命内部错误的示例程序:

unit TestForm;
interface
uses System.Classes, Vcl.Forms, Vcl.Controls, Vcl.StdCtrls;
type
  TForm1            = class(TForm)
                        private
                        public
                      end;

  TProgType         = (_Prog1,_Prog2);
  TCxProgTypeHlp    = record helper for TProgType
                        private
                          function  GetIsProg2 : boolean; inline;
                        public
                          property  IsProg2 : boolean read GetIsProg2;
                      end;
  TProgAccess       = class
                        private
                          fProgType : TProgType;
                        public
                          function  ProgType : TProgType;
                          function  IsProg2 : boolean; inline;
                          function  CheckProg(const ProgTag : string) : boolean;
                      end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses System.SysUtils;

function TCxProgTypeHlp.GetIsProg2 : boolean;
begin
     Result:=Self = _Prog2;
end;

function TProgAccess.ProgType : TProgType;
begin
     Result:=fProgType;
end;

function TProgAccess.IsProg2 : boolean;
begin
     Result:=ProgType.IsProg2;
end;

function TProgAccess.CheckProg(const ProgTag : string) : boolean;
begin
     Result:=IsProg2;
end;

end.

当我删除任何内联语句时,编译器错误消失。我在做什么有误解吗? 感谢您的帮助。

1 个答案:

答案 0 :(得分:5)

通常,对于内部编译器错误,您无能为力。在您的情况下,您找到了一种解决方法,这表明您的代码没有错。

来自Documentation

  

“内部错误”之后的信息包含一个或多个字符,后跟一个数字,指示发生错误的编译器本身中的文件和行号。尽管此信息可能对您没有帮助,但如果您报告错误以及何时报告错误,它可以帮助我们(Embarcadero)找出问题。请务必记下此信息,并将其包含在内部错误描述中。

只需提交QP错误报告并继续。