Răsfoiți Sursa

* correctly handle make_simple_ref() for voidpointers

git-svn-id: branches/hlcgllvm@28493 -
Jonas Maebe 11 ani în urmă
părinte
comite
d09243c8c1
1 a modificat fișierele cu 7 adăugiri și 2 ștergeri
  1. 7 2
      compiler/llvm/hlcgllvm.pas

+ 7 - 2
compiler/llvm/hlcgllvm.pas

@@ -1385,6 +1385,7 @@ implementation
       hreg1,
       hreg2: tregister;
       tmpref: treference;
+      defsize: asizeint;
     begin
       { already simple? }
       if (not assigned(ref.symbol) or
@@ -1397,12 +1398,16 @@ implementation
         end;
 
       hreg2:=getaddressregister(list,getpointerdef(def));
+      defsize:=def.size;
+      { for voiddef/formaldef }
+      if defsize=0 then
+        defsize:=1;
       { symbol+offset or base+offset with offset a multiple of the size ->
         use getelementptr }
       if (ref.index=NR_NO) and
-         (ref.offset mod def.size=0) then
+         (ref.offset mod defsize=0) then
         begin
-          ptrindex:=ref.offset div def.size;
+          ptrindex:=ref.offset div defsize;
           if assigned(ref.symbol) then
             reference_reset_symbol(tmpref,ref.symbol,0,ref.alignment)
           else