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