【问题标题】:Compiler Internal Error upgrading from Delphi 2009 to XE3从 Delphi 2009 升级到 XE3 的编译器内部错误
【发布时间】:2012-10-22 05:52:55
【问题描述】:

使用 delphi XE3 编译一个相当大的项目(>750K 行)(从 2009 年升级)

得到以下错误

[dcc32 致命错误] MainForm.pas(3170): F2084 内部错误: URW1147

与这个问题类似,但是代码中没有任何地方使用泛型。

internal error with generic array

错误不对应一行代码,而只是文件末尾。

即在“结束”之后。

在谷歌搜索之后,我也尝试了“代码内联控件”的所有设置,但没有任何乐趣。

不确定从哪里(其他)开始寻找,并希望得到任何有根据的反馈(甚至可能是一个疯狂的猜测)。

尚未提交 QC 报告,希望从这里得到有用的反馈。

谢谢

【问题讨论】:

  • 没有代码绝对不可能提供帮助。您需要将代码剥离为一个小示例,该示例会产生内部错误。不要担心保持代码正常工作。只需删除代码,直到它编译没有内部错误。它永远不必为了生成测试用例而实际运行并做任何有意义的事情。
  • 感谢大卫,我的下一个方法是创建一个新项目并剥离。同时希望有人可能有一个灯泡时刻。

标签: delphi delphi-xe3


【解决方案1】:

按照上面大卫的建议,通过一次剥离一段代码来解决这个问题。

如果这对任何人都有帮助,请遵循解决方案...

原来存在“泛型”代码的“剩余”片段,该片段被认为已在几年前被删除并使用更传统的技术替换。

有一个局部变量没有被重构,定义如下。

var
  TestProc: TProc;

当按以下方式分配时,会触发内部编译器错误(但不靠近违规代码行)。

TestProc := TestSuite.TestProcs[i].TestProc;

上面的数组元素TestProc属于对象过程

这在 2009 年下编译(并且运行良好),这就是为什么它没有更早被选中,但在 XE3 下会出现内部编译器错误。

更正局部变量声明(到对象的过程)解决了这个问题。

【讨论】:

  • 您是否将失败的来源发布到 QC 上?
猜你喜欢
  • 2011-05-28
  • 1970-01-01
  • 1970-01-01
  • 2014-08-09
  • 1970-01-01
  • 2011-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多