Преглед изворни кода

* fixed llvm a_load_reg_ref() when storing a register to a record reference
of 3/5/6/7 bytes

git-svn-id: trunk@32292 -

Jonas Maebe пре 9 година
родитељ
комит
3e917f5889
1 измењених фајлова са 5 додато и 1 уклоњено
  1. 5 1
      compiler/llvm/hlcgllvm.pas

+ 5 - 1
compiler/llvm/hlcgllvm.pas

@@ -532,8 +532,12 @@ implementation
                 truncate it before storing. Unfortunately, we cannot truncate
                 records (nor bitcast them to integers), so we first have to
                 store them to memory and then bitcast the pointer to them
+
+                We can't truncate an integer to 3/5/6/7 bytes either, so also
+                pass via a temp in that case
               }
-              if fromsize.typ in [arraydef,recorddef] then
+              if (fromsize.typ in [arraydef,recorddef]) or
+                 (tosize.size in [3,5,6,7]) then
                 begin
                   { store struct/array-in-register to memory }
                   tg.gethltemp(list,fromsize,fromsize.size,tt_normal,tmpref);