[GHC] #12009: ASSERTION FAILED: file rts/LdvProfile.c, line 48
GHC
ghc-devs at haskell.org
Thu May 5 05:49:43 UTC 2016
#12009: ASSERTION FAILED: file rts/LdvProfile.c, line 48
-------------------------------------+-------------------------------------
Reporter: erikd | Owner: erikd
Type: bug | Status: new
Priority: normal | Milestone: 8.0.2
Component: Compiler | Version: 7.10.3
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: Runtime crash | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by erikd):
The following patch prevents the crash, but may result in in-correct heap
profiling results:
{{{#!diff
diff --git a/rts/LdvProfile.c b/rts/LdvProfile.c
index 1dfdc56..43a47aa 100644
--- a/rts/LdvProfile.c
+++ b/rts/LdvProfile.c
@@ -184,7 +184,14 @@ processNurseryForDead( void )
for (bd = MainCapability.r.rNursery->blocks; bd != NULL; bd =
bd->link) {
p = bd->start;
while (p < bd->free) {
+ // The start of the block may be zero filled which we need to
skip
+ // over.
while (p < bd->free && !*p) p++; // skip slop
+
+ // In debug mode, with sanity checking enabled, start of the
block
+ // may be filled with `0xaa` so if we find it, we just break.
+ IF_DEBUG(sanity, if (*((StgWord32*)p) == 0xaaaaaaaa) break;);
+
if (p >= bd->free) break;
p += processHeapClosureForDead((StgClosure *)p);
}
}}}
Maybe we could print a warning about inaccuracey if debug sanity checking
is on in profiling mode.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/12009#comment:5>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list