https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79374
Bug ID: 79374 Summary: missing sometimes-uninitialized warning in switch statement Product: gcc Version: unknown Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: hermantenbrugge at home dot nl Target Milestone: --- The code below: int tst(int); int tst (int sel) { int rv; switch (sel) { case 1: break; default: rv = 0; break; } return rv; } compiled with 'gcc -S -O3 -Wall tst.c' results in no warning in gcc 6.3.1 and gcc 7.0.1 (head) When compiled with clang 3.8.1 with same compiler options I get: tst.c:9:8: warning: variable 'rv' is used uninitialized whenever switch case is taken [-Wsometimes-uninitialized] case 1: break; ^ tst.c:13:10: note: uninitialized use occurs here return rv; ^~ tst.c:6:9: note: initialize the variable 'rv' to silence this warning int rv; ^ = 0 1 warning generated. This is a very reduced test case and in the real code it was much harder to see that rv was uninitialized. I now that bug '44042' was closed as 'RESOLVED WONTFIX' but clang gives the correct warning.