浏览代码

* variables where the address is taken could have aliases so they aren't invariant

git-svn-id: trunk@11806 -
florian 17 年之前
父节点
当前提交
17d3da7266
共有 1 个文件被更改,包括 4 次插入1 次删除
  1. 4 1
      compiler/optloop.pas

+ 4 - 1
compiler/optloop.pas

@@ -200,7 +200,10 @@ unit optloop;
               if (pi_dfaavailable in current_procinfo.flags) and
                 assigned(loop.optinfo) and
                 assigned(expr.optinfo) then
-                result:=not(DFASetIn(loop.optinfo^.defsum,expr.optinfo^.index));
+                { no aliasing? }
+                result:=not(tabstractvarsym(tloadnode(expr).symtableentry).addr_taken) and
+                { no definition in the loop? }
+                  not(DFASetIn(loop.optinfo^.defsum,expr.optinfo^.index));
             end;
         end;
       end;