浏览代码

* 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);