From: Simon Marlow Date: Tue, 14 Nov 2006 16:00:27 +0000 (+0000) Subject: fix types in generated C for comparison MachOps X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=commitdiff_plain;h=45b5e0b79b4276e761cab5e4a51a7eff9220c3ba fix types in generated C for comparison MachOps C comparisons have type 'int', but our generated code assumed they had type 'StgWord', leading to (very) occasional warnings from gcc. --- diff --git a/compiler/cmm/PprC.hs b/compiler/cmm/PprC.hs index 90599d7..6d63e87 100644 --- a/compiler/cmm/PprC.hs +++ b/compiler/cmm/PprC.hs @@ -356,6 +356,20 @@ pprMachOpApp op args isMulMayOfloOp _ = False pprMachOpApp mop args + | Just ty <- machOpNeedsCast mop + = ty <> parens (pprMachOpApp' mop args) + | otherwise + = pprMachOpApp' mop args + +-- Comparisons in C have type 'int', but we want type W_ (this is what +-- resultRepOfMachOp says). The other C operations inherit their type +-- from their operands, so no casting is required. +machOpNeedsCast :: MachOp -> Maybe SDoc +machOpNeedsCast mop + | isComparisonMachOp mop = Just mkW_ + | otherwise = Nothing + +pprMachOpApp' mop args = case args of -- dyadic [x,y] -> pprArg x <+> pprMachOp_for_C mop <+> pprArg y