diff options
Diffstat (limited to 'byterun/finalise.c')
-rw-r--r-- | byterun/finalise.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/byterun/finalise.c b/byterun/finalise.c index 0ad97f552..b2c51d086 100644 --- a/byterun/finalise.c +++ b/byterun/finalise.c @@ -48,8 +48,15 @@ void final_update (void) for (i = 0; i < old; i++){ Assert (Is_block (final_table[i].val)); Assert (Is_in_heap (final_table[i].val)); + again: if (Is_white_val (final_table[i].val)){ - struct final f = final_table[i]; + struct final f; + + if (Tag_val (final_table[i].val) == Forward_tag){ + final_table[i].val = Forward_val (final_table[i].val); + goto again; + } + f = final_table[i]; final_table[i] = final_table[--old]; final_table[--active] = f; -- i; |