Browse Source

* when doing a pointer comparison on i8086, don't cast a far pointer to a near one (pchar), but use a far one instead

git-svn-id: trunk@24866 -
nickysn 12 years ago
parent
commit
d387182bd6
1 changed files with 14 additions and 4 deletions
  1. 14 4
      compiler/nadd.pas

+ 14 - 4
compiler/nadd.pas

@@ -1618,12 +1618,22 @@ implementation
                     { a voidpointer of 8 bytes). A conversion to voidpointer would be  }
                     { optimized away, since the result already was a voidpointer, so   }
                     { use a charpointer instead (JM)                                   }
-{$ifndef jvm}
-                    inserttypeconv_internal(left,charpointertype);
-                    inserttypeconv_internal(right,charpointertype);
-{$else jvm}
+{$if defined(jvm)}
                     inserttypeconv_internal(left,java_jlobject);
                     inserttypeconv_internal(right,java_jlobject);
+{$elseif defined(i8086)}
+                    { we don't have a charfarpointertype yet, so for far pointers we use bytefarpointertype }
+                    if is_farpointer(left.resultdef) then
+                      inserttypeconv_internal(left,bytefarpointertype)
+                    else
+                      inserttypeconv_internal(left,charpointertype);
+                    if is_farpointer(right.resultdef) then
+                      inserttypeconv_internal(right,bytefarpointertype)
+                    else
+                      inserttypeconv_internal(right,charpointertype);
+{$else}
+                    inserttypeconv_internal(left,charpointertype);
+                    inserttypeconv_internal(right,charpointertype);
 {$endif jvm}
                  end;
                ltn,lten,gtn,gten: