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
Variables in a block are collected into
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
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
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