OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc1/] [gcc/] [testsuite/] [g++.old-deja/] [g++.brendan/] [copy8.C] - Blame information for rev 338

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 305 jeremybenn
// { dg-do run  }
2
// GROUPS passed copy-ctors
3
/*
4
This report is for GCC 2.3.3 running on a Sun/4.  The bug is that when
5
a class instance is passed-by-value, GCC does not correctly copy the value.
6
At the end of this report is an example program that demonstrates the bug.
7
It should print:
8
 
9
        construct A('x')
10
        copy A('x')
11
        destruct A('x')
12
        destruct A('x')
13
 
14
and in fact does for IBM's xlC C++.  However, for GCC 2.3.3, it fails
15
to print the second line ["copy A('x')"], which indicates that it failed
16
to call the copy-constructor for class A when it should have.  Below is a
17
typescript that lists the program, shows how I compiled it, and shows the
18
incorrect output.
19
*/
20
 
21
extern "C" int printf (const char *, ...);
22
extern "C" void exit (int);
23
 
24
int count = 0;
25
 
26
void
27
die (int x)
28
{
29
  if (x != ++count)
30
    {
31
      printf ("FAIL\n");
32
      exit (1);
33
    }
34
}
35
 
36
class A { // Class with explicit & instrumented copy-constructor and destructor.
37
public:
38
    const char * id;
39
    A( const char * id1 ) : id(id1) { die (1); }
40
 
41
    // Copy constructor
42
    A( const A& a ) : id(a.id) { die (2); }
43
 
44
    // Destructor
45
    ~A() { count++; if (count != 3 && count != 4) die (-1); }
46
};
47
 
48
class X { // Class without explicit copy-constructor
49
private:
50
    A a;
51
public:
52
    X( const char * id ) : a(id) {}
53
};
54
 
55
void Func( X x ) {      // Function with call-by-value argument
56
}
57
 
58
int
59
main() {
60
    X x("x");           // Construct instance of x.
61
 
62
    // The next line should call the copy-constructor for X since x is
63
    // being passed by value.  For GCC 2.3.3 on a Sun/4, it does not.
64
    Func(x);
65
 
66
    printf ("PASS\n");
67
    return 0;
68
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.