[Bug c++/114631] Inconsistent behavior with infinite loops?

2024-04-08 Thread kubry at gmx dot com via Gcc-bugs
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?

2024-04-07 Thread pinskia at gcc dot gnu.org via Gcc-bugs
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?

2024-04-07 Thread kubry at gmx dot com via Gcc-bugs
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?

2024-04-07 Thread pinskia at gcc dot gnu.org via Gcc-bugs
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?

2024-04-07 Thread kubry at gmx dot com via Gcc-bugs
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?