[Bug c++/114631] Inconsistent behavior with infinite loops?
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114631 --- Comment #5 from Ganton --- Thanks for the detailed information, Andrew! If anybody reads this bug report: The reported problems are seen using GCC 13.2.0 and `-O2`, but not using `-O1` nor `-O0`.
[Bug c++/114631] Inconsistent behavior with infinite loops?
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114631 --- Comment #4 from Andrew Pinski --- (In reply to Ganton from comment #3) > When that page (https://bugreports.qt.io/browse/QTBUG-33026) was written, > the behavior of GCC was not like the described in this bug report (because > the `for (doub = [...]` infinite loop was always taken into account). Do we > have a regression? 🤔 No, the removal of loops which cannot prove being finite was added in GCC 10 (which was released in 2020) while the issue you pointed to was written up in 2013 which was GCC 4.8.x timeframe. In this case C++ standard has not changed, just GCC started to optimize more based on what the standard says is allowed.
[Bug c++/114631] Inconsistent behavior with infinite loops?
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114631 --- Comment #3 from Ganton --- Note: That code was initially aimed for `decimal32` testing (https://bugreports.qt.io/browse/QTBUG-33026) because using `decimal32` instead of `double`... the `for (doub = [...]` loop is not infinite. When that page (https://bugreports.qt.io/browse/QTBUG-33026) was written, the behavior of GCC was not like the described in this bug report (because the `for (doub = [...]` infinite loop was always taken into account). Do we have a regression? 🤔 Keep up the good work! Thanks a lot for GCC!
[Bug c++/114631] Inconsistent behavior with infinite loops?
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114631 Andrew Pinski changed: What|Removed |Added Status|UNCONFIRMED |RESOLVED Resolution|--- |DUPLICATE --- Comment #2 from Andrew Pinski --- So the C++ standard requires forward progress, otherwise it is undefined behavior (except if the condition is a constant expression which evaluates to true [See https://wg21.link/P2809R3]) . *** This bug has been marked as a duplicate of bug 93041 ***
[Bug c++/114631] Inconsistent behavior with infinite loops?
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114631 --- Comment #1 from Ganton --- Maybe this can be useful: "if we remove the `std::cout << doub << " ";` line... the program stops"... does that happen because an "aggressive"(?🤔) optimization is made (without warning the user)? If we add a `for(;;);` after the `double doub;` line, then the program never stops. If an "aggressive"(?🤔) optimization is made, why is made for one loop but not for the other loop? Is that inconsistent?