The lifetime of object a starts from its declaration, and extends to the end of the block containing it.
This means that, in jumping back to before the declaration, you jump to a stack frame situations where the local didn't exist, so it must be destructed
The point of declaration for a name is immediately after its complete declarator (Clause 8) and before its initializer (if any) , [...] (§ 3.3.2)
A name declared in a block (6.3) is local to that block; it has block scope. Its potential scope begins at its
point of declaration (3.3.2) and ends at the end of its block. A variable declared at block scope is a local
variable. (§ 3.3.3)