The Evolution of C Programming Practices: A Study of Unix (2016) [pdf]
It bothers me when "goto" is assumed to be "a maligned language construct".<p>People who think "goto" is evil should also give up the other jump statements: continue, break, and return (and also switch, though its not listed as a jump instruction in the C standard, at least not in '89 or '99).<p>You can see some contradictions in the paper regarding goto.  For example, they state that deep nesting should be avoided, but goto should be avoided as well, even though one benefit of using goto is to limit nesting depth.  From the Linux Kernel coding style doc:
- unconditional statements are easier to understand and follow
- nesting is reduced
- errors by not updating individual exit points when making
  modifications are prevented
- saves the compiler work to optimize redundant code away ;)