This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug tree-optimization/61289] [4.9/4.10 Regression] Bad jump threading generates infinite loop


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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2014-05-23
                 CC|                            |jakub at gcc dot gnu.org
            Version|unknown                     |4.9.0
   Target Milestone|---                         |4.9.1
            Summary|Bad jump threading          |[4.9/4.10 Regression] Bad
                   |generates infinite loop     |jump threading generates
                   |                            |infinite loop
     Ever confirmed|0                           |1

--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
struct S
{
  inline int fn1 () const { return s; }
  __attribute__ ((noinline, noclone)) S *fn2 (int);
  __attribute__ ((noinline, noclone)) void fn3 ();
  __attribute__ ((noinline, noclone)) static S *fn4 (int);
  S (int i) : s (i) {}
  int s;
};

int a = 0;
S *b = 0;

S *
S::fn2 (int i)
{
  a++;
  if (a == 1)
    return b;
  if (a > 3)
    __builtin_abort ();
  b = this;
  return new S (i + s);
}

S *
S::fn4 (int i)
{
  b = new S (i);
  return b;
}

void
S::fn3 ()
{
  delete this;
}

void
foo ()
{
  S *c = S::fn4 (20);
  for (int i = 0; i < 2;)
    {
      S *d = c->fn2 (c->fn1 () + 10);
      if (d != c)
{
  c->fn3 ();
  c = d;
  ++i;
}
    }
  c->fn3 ();
}

int
main ()
{
  foo ();
}

Started with r205279.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]