https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89501
--- Comment #2 from Linus Torvalds <torva...@linux-foundation.org> --- (In reply to Andrew Pinski from comment #1) > I think it comes down to the same issue as PR 18501. Very possibly the same issue in just a different guise. NOTE! I have in the meantime verified that yes, it does seem to be about the pattern int x; if (somecondition) { x = something(); if (x != XYZ) return x; } return x; where gcc seems to turn the "if (x != XYZ) return x" to mean that "x" clearly _has_ to be XYZ elsewhere. If I change my kernel-based test-case to do if (ret != 1) return ret; instead of the original if (ret) return ret; then gcc will actually generate code that ends with movl $1, %eax popq %rbp popq %r12 ret ie it will basically consider "ret" to be initialized to that value "1", even if the basic block that assigned it was never actually executed. Knowing how SSA works, I'm not entirely surprised, but obviously if you'd like to see the warning about buggy source code, it's less than optimal. Anyway, this shouldn't be a high priority, but it does strike me as a potentially fairly common pattern that people might be missing warnings for. Linus