I used a goto a while back when I found that one of our recursive routines could use up all the stack in a specific circumstance.

The routine itself makes most sense being recursive, so in this situation I opted for a malloc+setjmp+longjmp to save & restore data and address and then used a goto to get to the start of the routine. I guess I could have used a while(1) loop (or possibly another setjmp/longjmp), but the goto seemed most logicial.

Only time I've ever used a goto in 'C'.