(root)/
gcc-13.2.0/
gcc/
testsuite/
g++.dg/
tree-prof/
indir-call-recursive-inlining.C
/* { dg-options "-O2 " } */

class Parent
{
public:
  Parent *object;

  Parent()
  {
       object = this;
  }

  virtual void recurse (int t) = 0;
};

class Child : public Parent
{

  Parent *
  get_object ()
  {
     return this;
  }

public:
  virtual void
  recurse (int t)
  {
    if (t != 10)
      for (int i = 0; i < 5; ++i)
        get_object()->recurse(t + 1);
  };
};

Parent *
create_object ()
{
  Child *mod = new Child;
  return mod;
}

int
main (int argc, char **argv)
{
  Parent *parent = create_object ();

  for (int i = 0; i < 5; ++i)
    {
	  parent->recurse (0);
    }

  return 0;
}