Commit a0d2d5bb authored by Simon Marlow's avatar Simon Marlow
Browse files

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.
parent cad764aa
......@@ -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"
......@@ -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;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment