1139749Simp// { dg-do run  }
266703Sarchieint state;
366703Sarchieint fail;
466703Sarchie
566703Sarchieclass A {
666703Sarchiepublic:
766703Sarchie  A() {
866703Sarchie    if (++state != 1)
966703Sarchie      fail = 1;
1066703Sarchie  }
1166703Sarchie  virtual int foo() {
1266703Sarchie    if (++state != 2)
1366703Sarchie      fail = 1;
1466703Sarchie    return 0;
1566703Sarchie  }
1666703Sarchie  virtual ~A() {
1766703Sarchie    if (++state != 3)
1866703Sarchie      fail = 1;
1966703Sarchie  }
2066703Sarchie};
2166703Sarchie
2266703SarchieA* bar() {
2366703Sarchie  return new A;
2466703Sarchie}
2566703Sarchie
2666703Sarchieint main() {
2766703Sarchie  A *aptr = bar();
2866703Sarchie  aptr->foo();
2966703Sarchie  if (dynamic_cast <void*> (aptr) != aptr)
3066703Sarchie    fail = 1;
3166703Sarchie  delete aptr;
3266703Sarchie  if (++state != 4)
3366703Sarchie    fail = 1;
3466703Sarchie  return fail;
3566703Sarchie}
3666703Sarchie