OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [gcc-4.5.1/] [gcc/] [testsuite/] [g++.dg/] [debug/] [vartrack1.C] - Rev 301

Go to most recent revision | Compare with Previous | Blame | View Log

// This testcase used to hang the compiler in vt_find_locations.
// { dg-do compile }
// { dg-options "-O2 -g" }

struct S
{
  int a;
  S *b, *c, *d;
};

struct T
{
  void f1 (S *x);
  void f2 (S *x);
  void f3 (S *x, S *y);
  S *e;
};

void
T::f3 (S *x, S *y)
{
  while (x != this->e && (!x || x->a == 1))
    {
      if (x == y->c)
        {
          S *w = y->d;
          if (w && w->a == 0)
            {
              w->a = 1;
              y->a = 0;
              f2 (y);
              w = y->d;
            }
          if (w && (!w->c || w->c->a == 1) && (!w->d || w->d->a == 1))
            {
              w->a = 0;
              x = y;
              y = x->b;
            }
          else
            {
              if (w && (!w->d || w->d->a == 1))
                {
                  if (w->c)
                    w->c->a = 1;
                  w->a = 0;
                  f1 (w);
                  w = y->d;
                }
              if (w)
                {
                  w->a = y->a;
                  if (w->d)
                    w->d->a = 1;
                }
              y->a = 1;
              f2 (y);
              x = e;
            }
        }
      else
        {
          S *w = y->c;
          if (w && w->a == 0)
            {
              w->a = 1;
              y->a = 0;
              f1 (y);
              w = y->c;
            }
          if (w && (!w->c || w->c->a == 1) && (!w->d || w->d->a == 1))
            {
              w->a = 0;
              x = y;
              y = x->b;
            }
          else
            {
              if (w && (!w->c || w->c->a == 1))
                {
                  w->a = 0;
                  if (w->d)
                    w->d->a = 1;
                  f2 (w);
                  w = y->c;
                }
              if (w)
                {
                  w->a = y->a;
                  if (w->c)
                    w->c->a = 1;
                }
              y->a = 1;
              f1 (y);
              x = e;
            }
        }
    }
}

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.