Use full contents size for arrays
authorPeter Wortmann <scpmw@leeds.ac.uk>
Wed, 29 May 2013 16:55:12 +0000 (17:55 +0100)
committerDavid Terei <davidterei@gmail.com>
Thu, 27 Jun 2013 20:39:11 +0000 (13:39 -0700)
I am not quite sure at what point it makes sense to look at arrays as
pointers, but I ran into at least one use case that strongly suggested
doing it this way (calculating the actual size of structures, to be exact).

compiler/llvmGen/Llvm/Types.hs

index 3ccdfec..c93147f 100644 (file)
@@ -317,8 +317,10 @@ llvmWidthInBits _      (LMFloat80)     = 80
 llvmWidthInBits _      (LMFloat128)    = 128
 -- Could return either a pointer width here or the width of what
 -- it points to. We will go with the former for now.
+-- PMW: At least judging by the way LLVM outputs constants, pointers
+--      should use the former, but arrays the latter.
 llvmWidthInBits dflags (LMPointer _)   = llvmWidthInBits dflags (llvmWord dflags)
-llvmWidthInBits dflags (LMArray _ _)   = llvmWidthInBits dflags (llvmWord dflags)
+llvmWidthInBits dflags (LMArray n t)   = n * llvmWidthInBits dflags t
 llvmWidthInBits dflags (LMVector n ty) = n * llvmWidthInBits dflags ty
 llvmWidthInBits _      LMLabel         = 0
 llvmWidthInBits _      LMVoid          = 0