Looking through the lua source, I noticed in ldo.c: setobjs2s(L, g->mainthread->top++, L->top - 1); /* copy error obj. */ As far as I can see from comments in lobject.h, setobjs2s is meant to only be used when copying to the same stack.