diff options
Diffstat (limited to 'compiler/optloop.pas')
-rw-r--r-- | compiler/optloop.pas | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/compiler/optloop.pas b/compiler/optloop.pas index 9a8ea5acaf..2f312aed24 100644 --- a/compiler/optloop.pas +++ b/compiler/optloop.pas @@ -81,10 +81,7 @@ unit optloop; function replaceloadnodes(var n: tnode; arg: pointer): foreachnoderesult; begin - if ((n.nodetype=loadn) and (preplaceinfo(arg)^.node.nodetype=loadn) and - (tloadnode(n).symtableentry=tloadnode(preplaceinfo(arg)^.node).symtableentry)) or - ((n.nodetype=temprefn) and (preplaceinfo(arg)^.node.nodetype=temprefn) and - (ttemprefnode(n).tempinfo=ttemprefnode(preplaceinfo(arg)^.node).tempinfo)) then + if n.isequal(preplaceinfo(arg)^.node) then begin if n.flags*[nf_modify,nf_write,nf_address_taken]<>[] then internalerror(2012090402); @@ -135,12 +132,12 @@ unit optloop; unrollblock:=internalstatements(unrollstatement); { can we get rid completly of the for ? } - getridoffor:=(unrolls=counts) and not(usesbreakcontinue); + getridoffor:=(unrolls=counts) and not(usesbreakcontinue) and + { TP/Macpas allows assignments to the for-variables, so we cannot get rid of the for } + ([m_tp7,m_mac]*current_settings.modeswitches=[]); if getridoffor then begin - if not(tfornode(node).left.nodetype in [temprefn,loadn]) then - internalerror(2012090301); replaceinfo.node:=tfornode(node).left; replaceinfo.value:=tordconstnode(tfornode(node).right).value; end; |