/* Verify that indirect-inlining induced removal of referenes will not remove
   too many references in presence of speculative devirtualization.  */
/* { dg-do link } */
/* { dg-options "-O3 -fno-early-inlining"  } */

class A
{
  public:
  virtual void foo(void (*)(void));
};

static
void b(void)
{
}

void
A::foo(void (*back)(void))
{
  back();
}

class A *a;

void __attribute__ ((noinline, noclone))
allocate_a ()
{
  a = new A();
}

int main()
{
  allocate_a();
  for (int i=0; i<10000;i++)
    a->foo(b);
}
