https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79956
--- Comment #3 from Markus Trippelsdorf <trippels at gcc dot gnu.org> --- Testcase that only warns with -O3 int a, b, c; void fn1() { int d[1]; int e, n = a; for (; 0; n++) ; c = 1; while (c) { if (a) for (;;) ; while (d[0]) { e -= 0; if (b) break; } } } % gcc -c -Wall -Wextra -O2 parity_l8.i -Werror -Wfatal-errors % gcc -c -Wall -Wextra -O3 parity_l8.i -Werror -Wfatal-errors parity_l8.i: In function ‘fn1’: parity_l8.i:12:13: error: ‘d[0]’ is used uninitialized in this function [-Werror=uninitialized] while (d[0]) { ~^~~ compilation terminated due to -Wfatal-errors. cc1: all warnings being treated as errors % clang -c -Wall -Wextra -O3 parity_l8.i -Werror -Wfatal-errors % clang --analyze -c -Wall -Wextra -O3 parity_l8.i -Werror -Wfatal-errors parity_l8.i:4:14: warning: Value stored to 'n' during its initialization is never read int e = 0, n = a; ^ ~ parity_l8.i:12:12: warning: Branch condition evaluates to a garbage value while (d[0]) { ^~~~ 2 warnings generated.