The chain of inferences that the compiler would need to do to properly
diagnose this case is beyond the scope of the mechanical transformations.
The reasoning you need to implement to catch these cases could even be
reduced to the halting problem.
I hate to bring this up, because it's a "half-troll", but the halting
problem is *not* undecidable on the machines we use everyday, because they
have finite memory.
The halting problem *is* solvable for finite machines (and indeed, if it
wasn't, we'd be in serious trouble).
http://doi.acm.org/10.1145/1052796.1052798
It's one thing to say it's beyond of the scope of the mechanical
transformations we want to do, but reduction to the halting problem is
usually just a punt :)
The uninitialized warnings are fairly easy to trick. There is only so much
the compiler can realistically do.