[commit: ghc] wip/erikd/remove-nat: rts/ProfHeap.c: Use `size_t` instead of `long`. (b46536f)
git at git.haskell.org
git at git.haskell.org
Mon May 2 10:49:52 UTC 2016
Repository : ssh://git@git.haskell.org/ghc
On branch : wip/erikd/remove-nat
Link : http://ghc.haskell.org/trac/ghc/changeset/b46536fa8d92b00c4f7742af1df121cb0d1c5fb8/ghc
>---------------------------------------------------------------
commit b46536fa8d92b00c4f7742af1df121cb0d1c5fb8
Author: Erik de Castro Lopo <erikd at mega-nerd.com>
Date: Mon May 2 20:22:00 2016 +1000
rts/ProfHeap.c: Use `size_t` instead of `long`.
On x64 Windows `sizeof long` is 4 which could easily overflow
resulting in incorrect heap profiling results. This change does not
affect either Linux or OS X where `sizeof long` == `sizeof size_t`
regardless of machine word size.
>---------------------------------------------------------------
b46536fa8d92b00c4f7742af1df121cb0d1c5fb8
rts/ProfHeap.c | 32 +++++++++++++++-----------------
1 file changed, 15 insertions(+), 17 deletions(-)
diff --git a/rts/ProfHeap.c b/rts/ProfHeap.c
index 875cc7e..2f940d2 100644
--- a/rts/ProfHeap.c
+++ b/rts/ProfHeap.c
@@ -50,13 +50,13 @@ static uint32_t max_era;
typedef struct _counter {
void *identity;
union {
- uint32_t resid;
+ size_t resid;
struct {
- long prim; // total size of 'inherently used' closures
- long not_used; // total size of 'never used' closures
- long used; // total size of 'used at least once' closures
- long void_total; // current total size of 'destroyed without being used' closures
- long drag_total; // current total size of 'used at least once and waiting to die'
+ size_t prim; // total size of 'inherently used' closures
+ size_t not_used; // total size of 'never used' closures
+ size_t used; // total size of 'used at least once' closures
+ size_t void_total; // current total size of 'destroyed without being used' closures
+ size_t drag_total; // current total size of 'used at least once and waiting to die'
} ldv;
} c;
struct _counter *next;
@@ -79,11 +79,11 @@ typedef struct {
Arena * arena;
// for LDV profiling, when just displaying by LDV
- long prim;
- long not_used;
- long used;
- long void_total;
- long drag_total;
+ size_t prim;
+ size_t not_used;
+ size_t used;
+ size_t void_total;
+ size_t drag_total;
} Census;
static Census *censuses = NULL;
@@ -739,7 +739,7 @@ static void
dumpCensus( Census *census )
{
counter *ctr;
- long count;
+ size_t count;
printSample(rtsTrue, census->time);
@@ -778,8 +778,6 @@ dumpCensus( Census *census )
count = ctr->c.resid;
}
- ASSERT( count >= 0 );
-
if (count == 0) continue;
#if !defined(PROFILING)
@@ -835,7 +833,7 @@ dumpCensus( Census *census )
}
-static void heapProfObject(Census *census, StgClosure *p, uint32_t size,
+static void heapProfObject(Census *census, StgClosure *p, size_t size,
rtsBool prim
#ifndef PROFILING
STG_UNUSED
@@ -843,7 +841,7 @@ static void heapProfObject(Census *census, StgClosure *p, uint32_t size,
)
{
void *identity;
- uint32_t real_size;
+ size_t real_size;
counter *ctr;
identity = NULL;
@@ -920,7 +918,7 @@ heapCensusChain( Census *census, bdescr *bd )
{
StgPtr p;
StgInfoTable *info;
- uint32_t size;
+ size_t size;
rtsBool prim;
for (; bd != NULL; bd = bd->link) {
More information about the ghc-commits
mailing list