When you call setjmp , it sets that as the return point, execution continues in the code immediately after calling setjmp .
At some point in the code, calling longjmp (with the jump buffer initialized by the previous call to setjmp ) returns execution to start again from the same point (i.e., the code immediately after calling setjmp ).
Therefore, the original call returns normally, and then at arbitrary later points, execution returns (or, at least, may return) to the same point again.
The attribute simply warns the compiler of this fact.
source share