https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95971
--- Comment #10 from Jan Ziak (http://atom-symbol.net) <0xe2.0x9a.0x9b at gmail dot com> --- I hope you do realize that the code I posted previously is equivalent, or very close to being equivalent, to the following code: struct President { const bool dead = false; bool isDead() { return dead; } } president; while(!president.isDead()); if(president.isDead()) { launch_retaliation_nukes(); } With -ffinite-loops enabled, the nukes are going to be launched because the only way that the while-loop can terminate is for President::dead to be true and thus the "const bool dead" can be assumed to be true when execution reaches the if-statement after skipping the deleted infinite while loop.