And I guess you don't use computed goto either. Since you don't get a backtrace the problem is probably that the (C) stack has been overwritten by the preceding instruction executed by eval_instruction.
I'd try to get a gdb breakpoint as shortly before it happens as possible (maybe the pike function _gdb_breakpoint can be useful) and then set a watchpoint on a suitable range of the stack.
It could also provide a clue to dump the stack raw and see if there's a telltale string or something there.