diff --git a/compiler/optdfa.pas b/compiler/optdfa.pas index 47bdf2bf8d..c5ec90bc4e 100644 --- a/compiler/optdfa.pas +++ b/compiler/optdfa.pas @@ -812,10 +812,9 @@ unit optdfa; i : longint; touchesnode : Boolean; - procedure MaybeDoCheck(n : tnode); + procedure MaybeDoCheck(n : tnode);inline; begin - if not(Result) then - Result:=Result or DoCheck(n); + Result:=Result or DoCheck(n); end; procedure MaybeSearchIn(n : tnode); @@ -834,12 +833,17 @@ unit optdfa; exit; include(node.flags,nf_processing); - touchesnode:=DFASetIn(node.optinfo^.use,nodetosearch.optinfo^.index) or - DFASetIn(node.optinfo^.def,nodetosearch.optinfo^.index); - if not(DFASetIn(node.optinfo^.life,nodetosearch.optinfo^.index)) then exit; + { we do not need this info always, so try to safe some time here, CheckAndWarn + takes a lot of time anyways } + if not(node.nodetype in [statementn,blockn]) then + touchesnode:=DFASetIn(node.optinfo^.use,nodetosearch.optinfo^.index) or + DFASetIn(node.optinfo^.def,nodetosearch.optinfo^.index) + else + touchesnode:=false; + case node.nodetype of whilerepeatn: begin