// { dg-do run  }
// GROUPS passed copy-ctors
/*
This report is for GCC 2.3.3 running on a Sun/4.  The bug is that when
a class instance is passed-by-value, GCC does not correctly copy the value.
At the end of this report is an example program that demonstrates the bug.  
It should print:

	construct A('x')
	copy A('x')
	destruct A('x')
	destruct A('x')

and in fact does for IBM's xlC C++.  However, for GCC 2.3.3, it fails
to print the second line ["copy A('x')"], which indicates that it failed
to call the copy-constructor for class A when it should have.  Below is a 
typescript that lists the program, shows how I compiled it, and shows the 
incorrect output.
*/

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 { // Class with explicit & instrumented copy-constructor and destructor.
public:
    const char * id;
    A( const char * id1 ) : id(id1) { die (1); }

    // Copy constructor
    A( const A& a ) : id(a.id) { die (2); }

    // Destructor
    ~A() { count++; if (count != 3 && count != 4) die (-1); }
};

class X { // Class without explicit copy-constructor
private:
    A a;
public:
    X( const char * id ) : a(id) {}
};

void Func( X x ) {      // Function with call-by-value argument
}

int
main() {
    X x("x");           // Construct instance of x.

    // The next line should call the copy-constructor for X since x is
    // being passed by value.  For GCC 2.3.3 on a Sun/4, it does not.
    Func(x);

    printf ("PASS\n");
    return 0;
}
