diff --git a/rts/LdvProfile.c b/rts/LdvProfile.c
index 9499fdb7cb0319c8feb32efc3867646831a900f1..608961e24678fba100b322ac766396f1d95a00b9 100644
--- a/rts/LdvProfile.c
+++ b/rts/LdvProfile.c
@@ -101,6 +101,7 @@ processHeapClosureForDead( const StgClosure *c )
     case CONSTR_2_0:
     case CONSTR_1_1:
     case CONSTR_0_2:
+    case CONSTR_NOCAF:
     case FUN:
     case FUN_1_0:
     case FUN_0_1:
@@ -130,7 +131,6 @@ processHeapClosureForDead( const StgClosure *c )
     case IND_STATIC:
     case FUN_STATIC:
     case THUNK_STATIC:
-    case CONSTR_NOCAF:
         // stack objects
     case UPDATE_FRAME:
     case CATCH_FRAME:
@@ -139,6 +139,9 @@ processHeapClosureForDead( const StgClosure *c )
     case RET_BCO:
     case RET_SMALL:
     case RET_BIG:
+    case CATCH_STM_FRAME:
+    case CATCH_RETRY_FRAME:
+    case ATOMICALLY_FRAME:
         // others
     case INVALID_OBJECT:
     case COMPACT_NFDATA:
diff --git a/testsuite/tests/profiling/should_run/all.T b/testsuite/tests/profiling/should_run/all.T
index 5ee45c35f39a430a918c62c518385f6b00202753..8d605f2da2bc6d899f811841fe93a8efd668e3f1 100644
--- a/testsuite/tests/profiling/should_run/all.T
+++ b/testsuite/tests/profiling/should_run/all.T
@@ -34,8 +34,7 @@ test('T3001', [only_ways(['prof_hb']), extra_ways(['prof_hb'])],
      compile_and_run, [''])
 
 test('T3001-2',
-     [only_ways(['prof_hb']), extra_ways(['prof_hb']),
-      when(wordsize(32), expect_broken(15063))],
+     [only_ways(['prof_hb']), extra_ways(['prof_hb'])],
      compile_and_run, ['-package bytestring'])
 
 # For profasm/profthreaded, the answer is correct but the ordering of some