It's not really specified. I'll describe the naive case first, and then explain why it may not really apply.
Naively, the memory a
was stored in still exists, although the name a
is no longer reachable outside function
. The memory may or may not still contain 10
- the compiler is free to overwrite it or to not bother. Obviously it may also be reused as something else any time afterwards.
If a
was really allocated in memory, that might be in a region known as the (call) stack, but this is just a popular calling convention and not required by the language.
Now, the compiler is also free to store a
only in a register since it notices the address is never taken, in which case it was never in memory in the traditional sense.
The compiler is further free to notice that a
is never observably used at all, and not bother emitting any of the code inside function
.