Commit 129e7b91 authored by Ian Lynagh's avatar Ian Lynagh

Handle IND_STATIC in isRetainer

IND_STATIC used to be an error, but at the moment it can happen
as isAlive doesn't look through IND_STATIC as it ignores static
closures. See trac #3956 for a program that hit this error.
parent f278f067
...@@ -1054,6 +1054,10 @@ isRetainer( StgClosure *c ) ...@@ -1054,6 +1054,10 @@ isRetainer( StgClosure *c )
case PAP: case PAP:
// indirection // indirection
case IND_PERM: case IND_PERM:
// IND_STATIC used to be an error, but at the moment it can happen
// as isAlive doesn't look through IND_STATIC as it ignores static
// closures. See trac #3956 for a program that hit this error.
case IND_STATIC:
case BLACKHOLE: case BLACKHOLE:
// static objects // static objects
case CONSTR_STATIC: case CONSTR_STATIC:
...@@ -1069,8 +1073,6 @@ isRetainer( StgClosure *c ) ...@@ -1069,8 +1073,6 @@ isRetainer( StgClosure *c )
// //
// Error case // Error case
// //
// IND_STATIC cannot be *c, *cp, *r in the retainer profiling loop.
case IND_STATIC:
// CONSTR_NOCAF_STATIC // CONSTR_NOCAF_STATIC
// cannot be *c, *cp, *r in the retainer profiling loop. // cannot be *c, *cp, *r in the retainer profiling loop.
case CONSTR_NOCAF_STATIC: case CONSTR_NOCAF_STATIC:
......
...@@ -45,6 +45,10 @@ isAlive(StgClosure *p) ...@@ -45,6 +45,10 @@ isAlive(StgClosure *p)
// ignore static closures // ignore static closures
// //
// ToDo: This means we never look through IND_STATIC, which means
// isRetainer needs to handle the IND_STATIC case rather than
// raising an error.
//
// ToDo: for static closures, check the static link field. // ToDo: for static closures, check the static link field.
// Problem here is that we sometimes don't set the link field, eg. // Problem here is that we sometimes don't set the link field, eg.
// for static closures with an empty SRT or CONSTR_STATIC_NOCAFs. // for static closures with an empty SRT or CONSTR_STATIC_NOCAFs.
......
Markdown is supported
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