https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108737

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Priority|P3                          |P1
                 CC|                            |jakub at gcc dot gnu.org
            Summary|[13 Regression] Apparent    |[13 Regression] Apparent
                   |miscompile of infinite loop |miscompile of infinite loop
                   |on gcc trunk in cddce2 pass |on gcc trunk in cddce2 pass
                   |                            |since r13-3875
           Keywords|needs-bisection             |

--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
The foo definition could be e.g.
extern "C" void exit (int);
int foo() {
  static int cnt;
  if (cnt++ == 0)
    return 1;
  if (cnt > 42)
    exit (0);
  return 0;
}

Yes, if first invocation of foo returns 0, then it would invoke UB in C++, but
if it returns non-zero and isn't const or pure, it can't be optimized this way.

Started with r13-3875-g9e11ceef165bc074c2fc85b8ddece606b24e710b

Reply via email to