Jumps from outside of a structured statement into that statement are not allowed. Hence, these examples are incorrect. 

Incorrect examples: 

a) for I := 1 to 10 do begin Sl; 3: S2 end; goto 3 b) if B then goto 3; if B1 then 3: S c) procedure P: procedure Q; begin ... 3: S end; begin ... goto 3 end. 

A goto statement should be reserved for unusual or uncommon situations where the natural structure of an algorithm cannot be reasonably expressed with other structured statements. A common situation is the handling of an unexpected type of input data. A good rule is to avoid the use of jumps to express regular iterations and conditional execution of statements, for such jumps destroy the reflection of the structure of computation in the textual (static) structures of the program. 

Moreover, the lack of correspondence between textual and computational (static and dynamic) structure is extremely detrimental to the clarity of the program and makes the task of verification much more difficult. The presence of goto's in a Pascal program is often an indication that the programmer has not yet learned "to think" in Pascal (as the goto is a necessary construction in some other programming languages). 

