// { dg-do run  }
// GROUPS passed copy-ctors
/*
The old g++ output is

Item()
Compound()
Pre foo
foo
~Compound()
~Item()
Post foo
~Compound()
~Item()

The output should be something like (produced from ATT 2.1)

Item()
Compound()
Pre foo
Item(const Item& i)    <------ missing above
foo
~Compound()
~Item()
Post foo
~Compound()
~Item()

*/

extern "C" int printf (const char *, ...);
extern "C" void exit (int);

int count = 0;

void
die (int x)
{
  if (x != ++count)
    {
      printf ("FAIL\n");
      exit (1);
    }
}
  

class Item {
 public:
  Item() { die (1); }
  Item(const Item& i) { die (4); }
  ~Item() { count++; if (count != 7 && count != 10) die (-1); }
};


class Compound {
  Item i;
 public:
  Compound() { die (2); }
  ~Compound() { count++; if (count != 6 && count != 9) die (-1); }
};


void foo(Compound a)
{
  die (5);
}

int
main()
{
  Compound a;

  die (3);
  foo(a);

  die (8);

  printf ("PASS\n");
}

