https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97336
--- Comment #3 from Martin Sebor <msebor at gcc dot gnu.org> --- For better or worse, in the internal representation there's no way to differentiate a call that was synthesized during loop unrolling (or any other similar transformation) from the original call in the source code, or even tell whether or not loop unrolling or any other such transformation took place. It also helps to keep in mind that the documented purpose of warnings in GCC "is to report constructions that are not inherently erroneous but that are risky or suggest there may have been an error." If the test case in comment #0 is representative of real code then even if it doesn't indicate a bug I would suggest to view the warning as an indication that the code can be improved. (This is often true for all of these flow-based warnings.) In the test case in comment #3 the body of the true branch of the if statement is eliminated early on because the condition (i == 5 || buf[5] == ' ') is known to be false.