FreeBSD/contrib/gcc/cp/decl.c
/* The following routine is used by the NeXT-style SJLJ exceptions;
   variables get marked 'volatile' so as to not be clobbered by
   _setjmp()/_longjmp() calls.  All variables in the current scope,
   as well as parent scopes up to (but not including) ENCLOSING_BLK
   shall be thusly marked.  */
The following routine is used by the NeXT-style SJLJ exceptions;
variables get marked 'volatile' so as to not be clobbered by
_setjmp()/_longjmp() calls.  All variables in the current scope,
as well as parent scopes up to (but not including) ENCLOSING_BLK
shall be thusly marked.
The following routine is used by the NeXT - style SJLJ exceptions ; variables get marked ' volatile ' so as to not be clobbered by _setjmp () / _longjmp () calls . All variables in the current scope as well as parent scopes up to ( but not including ) ENCLOSING_BLK shall be thusly marked .
void
objc_mark_locals_volatile (void *enclosing_blk)
{
  struct cp_binding_level *scope;
  for (scope = current_binding_level;
       scope && scope != enclosing_blk;
       scope = scope->level_chain)
    {
      tree decl;
      for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
	objc_volatilize_decl (decl);
      if (scope->kind == sk_function_parms)
	break;
    }
}
void objc_mark_locals_volatile ( void * enclosing_blk ) { struct cp_binding_level * scope ; for ( scope = current_binding_level ; scope && scope != enclosing_blk ; scope = scope -> level_chain ) { tree decl ; for ( decl = scope -> names ; decl ; decl = TREE_CHAIN ( decl ) ) objc_volatilize_decl ( decl ) ; if ( scope -> kind == sk_function_parms ) break ; } }
The following routine is used by the NeXT-style SJLJ exceptions;
variables get marked 'volatile' so as to not be clobbered by
_setjmp()/_longjmp() calls.
The following routine is used by the NeXT - style SJLJ exceptions ; variables get marked ' volatile ' so as to not be clobbered by _setjmp () / _longjmp () calls .
/* Do not climb up past the current function.  */