Am 18.05.2018 um 17:15 schrieb Sven Barth via fpc-devel: > Martok <list...@martoks-place.de <mailto:list...@martoks-place.de>> schrieb > am Fr., 18. Mai 2018, 15:40: > > > Citation: "If the loop was terminated prematurely with an exception or a > > break statement, the loop variable retains the value it had when the > > loop was exited." > As a quick fix, not unrolling loops left with exit at least fixes this > specific > situation. This still leaves exceptions raised, but IIRC the handlers > don't > restore context anyways, we might be okay? > > diff --git a/compiler/optloop.pas b/compiler/optloop.pas > index 46039ffc5a..dc714ea2cc 100644 > --- a/compiler/optloop.pas > +++ b/compiler/optloop.pas > @@ -76,7 +76,7 @@ unit optloop; > > function checkbreakcontinue(var n:tnode; arg: pointer): > foreachnoderesult; > begin > - if n.nodetype in [breakn,continuen] then > + if n.nodetype in [breakn,continuen,exitn] then > result:=fen_norecurse_true > else > result:=fen_false; > > I'll be running this on today's snapshot, see if anything else remains. > > > Maybe it should also check for goto and at least explicit raise statements?
I added raise, exit, goto and label as well. _______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel