From 14c1d88f583c0f1110b87d4396e0b7063fac231b Mon Sep 17 00:00:00 2001 From: David Terei Date: Fri, 25 Jun 2010 11:57:29 +0000 Subject: [PATCH] LLVM: Fix bug with calling tail with empty list --- compiler/llvmGen/Llvm/Types.hs | 22 ++++++++++++++-------- compiler/llvmGen/LlvmCodeGen/Regs.hs | 3 ++- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/compiler/llvmGen/Llvm/Types.hs b/compiler/llvmGen/Llvm/Types.hs index 50b3656..4956d8d 100644 --- a/compiler/llvmGen/Llvm/Types.hs +++ b/compiler/llvmGen/Llvm/Types.hs @@ -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] diff --git a/compiler/llvmGen/LlvmCodeGen/Regs.hs b/compiler/llvmGen/LlvmCodeGen/Regs.hs index cc961cc..fd3bc77 100644 --- a/compiler/llvmGen/LlvmCodeGen/Regs.hs +++ b/compiler/llvmGen/LlvmCodeGen/Regs.hs @@ -1,4 +1,5 @@ --- ---------------------------------------------------------------------------- -- | Deal with Cmm registers +-------------------------------------------------------------------------------- +-- | Deal with Cmm registers -- module LlvmCodeGen.Regs ( -- 1.7.10.4