diff options
-rw-r--r-- | rts/sm/Evac.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/rts/sm/Evac.c b/rts/sm/Evac.c index 53a473d26c..3e493347d8 100644 --- a/rts/sm/Evac.c +++ b/rts/sm/Evac.c @@ -652,6 +652,7 @@ loop: // case CONSTR_0_1: { + tag |= info->srt + 1; #if defined(COMPILING_WINDOWS_DLL) copy_tag_nolock(p,info,q,sizeofW(StgHeader)+1,gen_no,tag); #else @@ -676,9 +677,11 @@ loop: return; } + case CONSTR_1_0: + tag |= info->srt + 1; + FALLTHROUGH; case FUN_0_1: case FUN_1_0: - case CONSTR_1_0: copy_tag_nolock(p,info,q,sizeofW(StgHeader)+1,gen_no,tag); return; @@ -693,15 +696,18 @@ loop: copy(p,info,q,sizeofW(StgThunk)+2,gen_no); return; + case CONSTR_1_1: + case CONSTR_2_0: + tag |= info->srt + 1; + FALLTHROUGH; case FUN_1_1: case FUN_2_0: case FUN_0_2: - case CONSTR_1_1: - case CONSTR_2_0: copy_tag_nolock(p,info,q,sizeofW(StgHeader)+2,gen_no,tag); return; case CONSTR_0_2: + tag |= info->srt + 1; copy_tag_nolock(p,info,q,sizeofW(StgHeader)+2,gen_no,tag); return; @@ -709,9 +715,11 @@ loop: copy(p,info,q,thunk_sizeW_fromITBL(INFO_PTR_TO_STRUCT(info)),gen_no); return; - case FUN: case CONSTR: case CONSTR_NOCAF: + tag |= info->srt + 1; + FALLTHROUGH; + case FUN: copy_tag_nolock(p,info,q,sizeW_fromITBL(INFO_PTR_TO_STRUCT(info)),gen_no,tag); return; |