在升级到10.2东京之后,第三方组件之一开始抛出很多例外.调试显示有问题的代码部分,可以用这个(希望)最小代码表示:
function foo(i: Integer): Boolean;
label bar;
begin
try
if i=1 then goto bar;
Result:=False;
EXIT;
bar:
Result:=True; //<~~ H2077 Value assigned to 'foo' never used with Optimization on
finally
end;
end;
Run Code Online (Sandbox Code Playgroud)
将编译器选项中的优化设置为
foo(1)
返回False
foo(1)
返回True
在XE7中不会发生这样的问题.这个答案解释了东京编译器的变化可能是相关的 - 但也许修复了一些新引入的问题.
我的问题是: 东京的编译器存在缺陷吗?我很确定它是,但我是Delphi编程的新手,很高兴得到更有经验的用户的确认.
如果是编译器的缺陷,那么我有一个跟进问题:是否有任何快速方法来修复此代码?我知道如何goto
用简单的if then else
语句删除我的MCVE ,但真正的代码更复杂:
if cond1 then goto bar;
if cond2 then goto bar;
if cond3 then goto bar; …
Run Code Online (Sandbox Code Playgroud)