// { dg-do run  }
// GROUPS passed copy-ctors
// Using Cfront 3.0.1 the programm below prints
// 
// 	  A()
// 	  A(const A& a)
// 	  ~A()
// 	  A(A& a)        <---- !!!
// 	  ~A()
// 	  ~A()
// 
// the g++ 2.2.2 (sparc-sun-sunos4.1) generated code prints
// 
// 	  A()
// 	  A(const A& a)
// 	  ~A()
// 	  A(const A& a)  <---- !!!
// 	  ~A()
// 	  ~A()

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 A {
public:
  A() { die (1); }
  A(const A& a) { die (2); }
  A(A& a) { die (4); }
  ~A() { count++; if (count != 3 && count != 5 && count != 6) die (-1); }
};

void foo1(const A& a) {
  A b = a;
}

void foo2( A& a) {
  A b = a;
}

int main() {
  A a;

  foo1(a);
  foo2(a);

  printf ("PASS\n");
}
