b290064
commit db9b63105a541e4ad3f9c55e2cfadf716445ab87
b290064
Author: Geoffrey Mainland <gmainlan@microsoft.com>
b290064
Date:   Wed Jun 12 14:31:49 2013 +0100
b290064
b290064
    Avoid generating empty llvm.used definitions.
b290064
    
b290064
    LLVM 3.3rc3 complains when the llvm.used global is an empty array, so don't
b290064
    define llvm.used at all when it would be empty.
b290064
b290064
	Modified   compiler/llvmGen/LlvmCodeGen.hs
b290064
diff --git a/compiler/llvmGen/LlvmCodeGen.hs b/compiler/llvmGen/LlvmCodeGen.hs
b290064
index a157a25..4f2bded 100644
b290064
--- a/compiler/llvmGen/LlvmCodeGen.hs
b290064
+++ b/compiler/llvmGen/LlvmCodeGen.hs
b290064
@@ -117,18 +117,18 @@ cmmProcLlvmGens :: DynFlags -> BufHandle -> UniqSupply -> LlvmEnv -> [RawCmmDecl
b290064
       -> [[LlvmVar]] -- ^ info tables that need to be marked as 'used'
b290064
       -> IO ()
b290064
 
b290064
-cmmProcLlvmGens _ _ _ _ [] _ []
b290064
-  = return ()
b290064
-
b290064
 cmmProcLlvmGens _ h _ _ [] _ ivars
b290064
-  = let ivars' = concat ivars
b290064
-        cast x = LMBitc (LMStaticPointer (pVarLift x)) i8Ptr
b290064
-        ty     = (LMArray (length ivars') i8Ptr)
b290064
-        usedArray = LMStaticArray (map cast ivars') ty
b290064
-        lmUsed = (LMGlobalVar (fsLit "llvm.used") ty Appending
b290064
-                  (Just $ fsLit "llvm.metadata") Nothing False, Just usedArray)
b290064
-    in Prt.bufLeftRender h $ {-# SCC "llvm_used_ppr" #-}
b290064
-                             pprLlvmData ([lmUsed], [])
b290064
+    | null ivars' = return ()
b290064
+    | otherwise   = Prt.bufLeftRender h $
b290064
+                        {-# SCC "llvm_used_ppr" #-}
b290064
+                        pprLlvmData ([lmUsed], [])
b290064
+  where
b290064
+    ivars' = concat ivars
b290064
+    cast x = LMBitc (LMStaticPointer (pVarLift x)) i8Ptr
b290064
+    ty     = (LMArray (length ivars') i8Ptr)
b290064
+    usedArray = LMStaticArray (map cast ivars') ty
b290064
+    lmUsed = (LMGlobalVar (fsLit "llvm.used") ty Appending
b290064
+              (Just $ fsLit "llvm.metadata") Nothing False, Just usedArray)
b290064
 
b290064
 cmmProcLlvmGens dflags h us env ((CmmData _ _) : cmms) count ivars
b290064
  = cmmProcLlvmGens dflags h us env cmms count ivars