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

--- Comment #16 from Richard Biener <rguenth at gcc dot gnu.org> ---
Of course since -ffinite-loops and the C++ standard require forward progress
here and all testcases expect the loop to not terminate we're in the realm of
undefined behavior.  But I'm not yet convinced the control-dependence / CD-DCE
issue only shows up in such cases.  That said, it's fully expected that

int xx;
int main()
{
  int jobs_ = 1;
  int at_eof_ = 0;
  while (1)
    {
      for (int i = 0; i < jobs_; i++)
        {
          if (at_eof_)
            continue;
          at_eof_ = 1;
          if (xx)
            return 1;
        }
      jobs_ = 0;
    }
  return 0;
}

is eventually optimized to just return 1 with -ffinite-loops and we should
try to preserve that behavior.

Reply via email to