소스 검색

Also check for the type of the register when replacing it. In certain circumstances this can still lead to access to invalid memory resulting either in an access violation or invalid registers.

git-svn-id: trunk@22779 -
svenbarth 13 년 전
부모
커밋
d15304c25e
1개의 변경된 파일6개의 추가작업 그리고 3개의 파일을 삭제
  1. 6 3
      compiler/rgobj.pas

+ 6 - 3
compiler/rgobj.pas

@@ -2259,9 +2259,12 @@ unit rgobj;
                 begin
                   if regtype in [R_INTREGISTER,R_ADDRESSREGISTER] then
                     begin
-                      { no need to check for the register type here }
-                      tryreplacereg(ref^.base);
-                      tryreplacereg(ref^.index);
+                      if (ref^.base <> NR_NO) and
+                          (getregtype(ref^.base)=regtype) then
+                        tryreplacereg(ref^.base);
+                      if (ref^.index <> NR_NO) and
+                          (getregtype(ref^.index)=regtype) then
+                        tryreplacereg(ref^.index);
                     end;
                 end;
 {$ifdef ARM}