Netbsd no relation label
To make the code more readable and easier to follow
To make smaller programs, and get rid of code duplication
Implement a finite-state machine, using a state transition table and goto to switch between states (in absence of tail call elimination), particularly in automatically generated C code. For example, goto in the canonical LR parser.
Implementing multi-level break and continue if not directly supported in the language; this is a common idiom in C. Although Java reserves the goto keyword, it doesn't actually implement it. Instead, Java implements labelled break and labelled continue statements. According to the Java documentation, the use of gotos for multi-level breaks was the most common (90%) use of gotos in C. Java was not the first language to take this approach—forbidding goto, but providing multi-level breaks— the BLISS programming language (more precisely the BLISS-11 version thereof) preceded it in this respect.
Surrogates for single-level break or continue (retry) statements when the potential introduction of additional loops could incorrectly affect the control flow. This practice has been observed in Netbsd code.
Error handling (in absence of exceptions), particularly cleanup code such as resource deallocation. C++ offers an alternative to goto statement for this use case, which is : Resource Acquisition Is Initialization (RAII) through using destructors or using try and catch exceptions used in Exception handling. setjmp and longjmp are another alternative, and have the advantage of being able to unwind part of the call stack.
Popping the stack in, e.g., Algol, PL/I.
Specialized scripting languages that operate in a linear manner, such as a dialogue system for video games.These uses are relatively common in C, but much less common in C++ or other languages with higher-level features. However, throwing and catching an exception inside a function can be extraordinarily inefficient in some languages; a prime example is Objective-C, where a goto is a much faster alternative.Another use of goto statements is to modify poorly factored legacy code, where avoiding a goto would require extensive refactoring or code duplication. For example, given a large function where only certain code is of interest, a goto statement allows one to jump to or from only the relevant code, without otherwise modifying the function. This usage is considered code smell, but finds occasional use.PL/I label variables
PL/I has the data type LABEL, which can be used to implement both the "assigned goto" and the "computed goto."  PL/I allows branches out of the current block.  A calling procedure can pass a label as an argument to a called procedure which can then exit with a branch. The value of a label variable includes the address of a stack frame, and a goto out of block pops the stack./* This implements the equivalent of */
 /* the assigned goto                 */
   declare where label;
   where = somewhere;
   goto where;
   ...
 somewhere: /* statement */ ;
   ...
no relation