LLVM: Fix bug with calling tail with empty list
authorDavid Terei <davidterei@gmail.com>
Fri, 25 Jun 2010 11:57:29 +0000 (11:57 +0000)
committerDavid Terei <davidterei@gmail.com>
Fri, 25 Jun 2010 11:57:29 +0000 (11:57 +0000)
compiler/llvmGen/Llvm/Types.hs
compiler/llvmGen/LlvmCodeGen/Regs.hs

index 50b3656..4956d8d 100644 (file)
@@ -58,10 +58,13 @@ instance Show LlvmType where
   show (LMStruct tys  ) = "{" ++ (commaCat tys) ++ "}"
 
   show (LMFunction (LlvmFunctionDecl _ _ _ r varg p _))
-    = let varg' = if varg == VarArgs then ", ..." else ""
-          args = (tail.concat) $
+    = let args = ((drop 1).concat) $ -- use drop since it can handle empty lists
                   map (\(t,a) -> "," ++ show t ++ " " ++ spaceCat a) p
-    in show r ++ " (" ++ args ++ varg' ++ ")"
+          varg' = case varg of
+                        VarArgs | not (null args) -> ", ..."
+                                | otherwise       -> "..."
+                        _otherwise                -> ""
+      in show r ++ " (" ++ args ++ varg' ++ ")"
 
   show (LMAlias s _   ) = "%" ++ unpackFS s
 
@@ -351,14 +354,17 @@ data LlvmFunctionDecl = LlvmFunctionDecl {
 
 instance Show LlvmFunctionDecl where
   show (LlvmFunctionDecl n l c r varg p a)
-    = let varg' = if varg == VarArgs then ", ..." else ""
+    = let args = ((drop 1).concat) $ -- use drop since it can handle empty lists
+                  map (\(t,a) -> "," ++ show t ++ " " ++ spaceCat a) p
+          varg' = case varg of
+                        VarArgs | not (null args) -> ", ..."
+                                | otherwise       -> "..."
+                        _otherwise                -> ""
           align = case a of
                        Just a' -> " align " ++ show a'
                        Nothing -> ""
-          args = (tail.concat) $
-                  map (\(t,a) -> "," ++ show t ++ " " ++ spaceCat a) p
-    in show l ++ " " ++ show c ++ " " ++ show r ++ " @" ++ unpackFS n ++
-        "(" ++ args ++ varg' ++ ")" ++ align
+      in show l ++ " " ++ show c ++ " " ++ show r ++ " @" ++ unpackFS n ++
+             "(" ++ args ++ varg' ++ ")" ++ align
 
 type LlvmFunctionDecls = [LlvmFunctionDecl]
 
index cc961cc..fd3bc77 100644 (file)
@@ -1,4 +1,5 @@
--- ---------------------------------------------------------------------------- -- | Deal with Cmm registers
+--------------------------------------------------------------------------------
+-- | Deal with Cmm registers
 --
 
 module LlvmCodeGen.Regs (