.n with negative arity needs to be handled by the garbage collector
On some occasions (unboxed record fields, apparently), a .n
directive is generated with a negative arity, leading to nodes with negative arity which needs to be handled properly by the garbage collector.
One type where this occurs is:
:: StrictRec = {strict_int :: !Int, strict_list :: ![Int], strict_tuple :: !(!Int, !Int)}
This generates a.o. things:
.record rStrictRec ia(i,i) 1 3 "StrictRec"
.descn tStrictRec cStrictRec 3 1 "StrictRec"
.n 3 tStrictRec
.descs dStrictRec.strict_int nStrictRec.strict_int INT 3 0 "StrictRec.strict_int"
.n -3 dStrictRec.strict_int
.descs dStrictRec.strict_list nStrictRec.strict_list _ 1 0 "StrictRec.strict_list"
.n -4 dStrictRec.strict_list eaStrictRec.strict_list
.desc dStrictRec.strict_tuple nStrictRec.strict_tuple _hnf 1 0 "StrictRec.strict_tuple"
.n 1 dStrictRec.strict_tuple