(gccint.info.gz) Blocks

Info Catalog (gccint.info.gz) Statements (gccint.info.gz) Statement Sequences
 
 11.1.1 Blocks
 -------------
 
 Block scopes and the variables they declare in GENERIC are expressed
 using the `BIND_EXPR' code, which in previous versions of GCC was
 primarily used for the C statement-expression extension.
 
  Variables in a block are collected into `BIND_EXPR_VARS' in
 declaration order.  Any runtime initialization is moved out of
 `DECL_INITIAL' and into a statement in the controlled block.  When
 gimplifying from C or C++, this initialization replaces the `DECL_STMT'.
 
  Variable-length arrays (VLAs) complicate this process, as their size
 often refers to variables initialized earlier in the block.  To handle
 this, we currently split the block at that point, and move the VLA into
 a new, inner `BIND_EXPR'.  This strategy may change in the future.
 
  A C++ program will usually contain more `BIND_EXPR's than there are
 syntactic blocks in the source code, since several C++ constructs have
 implicit scopes associated with them.  On the other hand, although the
 C++ front end uses pseudo-scopes to handle cleanups for objects with
 destructors, these don't translate into the GIMPLE form; multiple
 declarations at the same level use the same `BIND_EXPR'.
 
Info Catalog (gccint.info.gz) Statements (gccint.info.gz) Statement Sequences
automatically generated by info2html