My questions aims at the behaviour of setjmp/longjmp concerning local variables.
Example code:
jmp_buf env;
void abc()
{
int error;
...
if(
setjmp/longjmp is implemented by saving the registers (including stack and code pointers etc) when first passed, and restoring them when jumping.
Automatic (aka "local", stack-allocated) variables that are not 'volatile' may be stored in registers rather than on the stack.
In these circumstances, the longjmp will restore these registers variables to their value at the point when the setjmp() was first called.
Additionally, a particularly clever compiler might avoid variables that can be inferred from the state of another variable, and calculating them on demand.
However, if the variable is automatic but not been assigned a register, it may be changed by code between the setjmp and the longjmp..
Volatile is explicitly telling the compiler not to store the variable in a register.
So unless you explicitly say a variable is volatile, if you changed the variable between the setjmp/longjmp, its value will depend upon the choices the compiler makes, and is therefore nothing you should rely upon ('indeterminate').
Interpretation 1 is correct. If the Interpretation 2 was intended, the original text would have used "or which are changed" instead of "and".