After reading all other PRs about uninitialized variable warnings, I believe this one is a different situtation.
PR 20968 -- is about inlining, which is not involved here PR 21733 -- is about two concatenated blocks rather than nested ones PR 31707 -- is about setjmp PR 20644 -- is also about unreachable code In this testcase, it is really obvious to the observer that the switch statement explicitly handles all the cases where it could be reached from the outer if statement, and thus always assigns a value to variable areg. GCC 3.x did not warn about it. I verified the warning is still generated with SVN revision 131533. (The code is taken from a project called simulavr, and has been cut down to the minimal test case reproducing the warning.) -- Summary: [Regression 4.1/4.3] warning: 'areg' may be used uninitialized in this function Product: gcc Version: 4.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: middle-end AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: j at uriah dot heep dot sax dot de http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34793