/* Verify that we survive creation and deletion of references to facilitate
   reference removal while also doing (unsuccessful) speculative
   devirtualization.  */
/* { dg-do link } */
/* { dg-options "-O3 -fno-early-inlining"  } */

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

static
void b(void)
{
}

void  __attribute__ ((noinline))
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);
}
