I'm not sure but I think that I've found a typo in do_split. It seems that sep points to the program tree so it cannot be temp. The fs variable, on the other hand, can be temp. --- gawk-3.1.1/field.c.orig Mon May 13 14:56:04 2002 +++ gawk-3.1.1/field.c Mon May 13 14:55:17 2002 @@ -895,7 +895,7 @@ do_split(NODE *tree) fs, rp, set_element, arr)); out: unref(src); - free_temp(sep); + free_temp(fs); return tmp; }