https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108808
Bug ID: 108808 Summary: G++ -O2 incorrectly bypasses an infinite loop Product: gcc Version: 12.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: zhihan.yue at foxmail dot com Target Milestone: --- Compile the following code with G++ -O2: #include <string> #include <iostream> struct Test { bool a = false; std::string b; }; int main() { Test test; test.a = false; std::cout << "enter" << std::endl; while(! test.a); std::cout << "passed" << std::endl; return 0; } Executing the program, the output will be: enter passed This shows that the infinite loop was skipped. Tested versions: (x64) - Problem happens on GCC V10.1-10.4, V11.1-11.3, V12.1-12.2 - No such problem on GCC V9.5, V8.5, V7.5 Seems like a bug introduced in V10.1