From a0d2d5bb9a949bc683d1fe576260f8c09930948a Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Fri, 19 Oct 2007 13:32:43 +0000 Subject: [PATCH] second attempt to fix C compiler warnings with -fhpc The hs_hpc_module() prototype in RtsExternal.h didn't match its usage: we were passing StgWord-sized parameters but the prototype used C ints. I think it accidentally worked because we only ever passed constants that got promoted. The constants unfortunately were sometimes negative, which caused the C compiler to emit warnings. I suspect PprC.pprHexVal may be wrong to emit negative constants in the generated C, but I'm not completely sure. Anyway, it's easy to fix this in CgHpc, which is what I've done. --- compiler/codeGen/CgHpc.hs | 7 +++++-- includes/RtsExternal.h | 8 ++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/compiler/codeGen/CgHpc.hs b/compiler/codeGen/CgHpc.hs index f44289d..516a9c7 100644 --- a/compiler/codeGen/CgHpc.hs +++ b/compiler/codeGen/CgHpc.hs @@ -31,6 +31,8 @@ import Char import StaticFlags import PackageConfig +import Data.Word + cgTickBox :: Module -> Int -> Code cgTickBox mod n = do let tick_box = (cmmIndex I64 @@ -77,8 +79,8 @@ initHpc this_mod (HpcInfo tickCount hashNo) CCallConv ) [ (mkLblExpr mkHpcModuleNameLabel,PtrHint) - , (CmmLit $ mkIntCLit tickCount,NoHint) - , (CmmLit $ mkIntCLit hashNo,NoHint) + , (word32 tickCount, NoHint) + , (word32 hashNo, NoHint) , (CmmLit $ CmmLabel $ mkHpcTicksLabel $ this_mod,PtrHint) ] (Just []) @@ -86,5 +88,6 @@ initHpc this_mod (HpcInfo tickCount hashNo) CmmMayReturn } where + word32 i = CmmLit (CmmInt (fromIntegral (fromIntegral i :: Word32)) I32) mod_alloc = mkFastString "hs_hpc_module" diff --git a/includes/RtsExternal.h b/includes/RtsExternal.h index 78b36ab..b95da38 100644 --- a/includes/RtsExternal.h +++ b/includes/RtsExternal.h @@ -73,13 +73,13 @@ extern void* createAdjustor(int cconv, StgStablePtr hptr, StgFunPtr wptr, extern void freeHaskellFunctionPtr(void* ptr); /* Hpc stuff */ -extern int hs_hpc_module(char *modName,unsigned int modCount,unsigned int modHashNo,StgWord64 *tixArr); +extern int hs_hpc_module(char *modName, StgWord32 modCount, StgWord32 modHashNo,StgWord64 *tixArr); // Simple linked list of modules typedef struct _HpcModuleInfo { char *modName; // name of module - unsigned int tickCount; // number of ticks - unsigned int tickOffset; // offset into a single large .tix Array - unsigned int hashNo; // Hash number for this module's mix info + StgWord32 tickCount; // number of ticks + StgWord32 tickOffset; // offset into a single large .tix Array + StgWord32 hashNo; // Hash number for this module's mix info StgWord64 *tixArr; // tix Array; local for this module struct _HpcModuleInfo *next; } HpcModuleInfo; -- 1.7.10.4