diff --git a/extlib/benz/eval.c b/extlib/benz/eval.c index be7c25ac..d8777dec 100644 --- a/extlib/benz/eval.c +++ b/extlib/benz/eval.c @@ -635,6 +635,7 @@ codegen_context_destroy(pic_state *pic, codegen_context *cxt) /* create irep */ irep = pic_malloc(pic, sizeof(struct irep)); + irep->list.next = irep->list.prev = 0; irep->refc = 1; irep->varg = pic_sym_p(pic, cxt->rest); irep->argc = pic_vec_len(pic, cxt->args) + 1; @@ -651,10 +652,12 @@ codegen_context_destroy(pic_state *pic, codegen_context *cxt) irep->nnums = cxt->flen; irep->npool = cxt->plen; - irep->list.next = pic->ireps.next; - irep->list.prev = &pic->ireps; - irep->list.next->prev = &irep->list; - irep->list.prev->next = &irep->list; + if (irep->npool > 0) { + irep->list.next = pic->ireps.next; + irep->list.prev = &pic->ireps; + irep->list.next->prev = &irep->list; + irep->list.prev->next = &irep->list; + } return irep; } diff --git a/extlib/benz/proc.c b/extlib/benz/proc.c index de175fac..259200a8 100644 --- a/extlib/benz/proc.c +++ b/extlib/benz/proc.c @@ -934,8 +934,10 @@ pic_irep_decref(pic_state *pic, struct irep *irep) pic_free(pic, irep->pool); /* unchain before decref children ireps */ - irep->list.prev->next = irep->list.next; - irep->list.next->prev = irep->list.prev; + if (irep->list.prev) { /* && irep->list.next */ + irep->list.prev->next = irep->list.next; + irep->list.next->prev = irep->list.prev; + } for (i = 0; i < irep->nirep; ++i) { pic_irep_decref(pic, irep->irep[i]);