URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Only display areas with differences |
Details |
Blame |
View Log
Rev 305 |
Rev 338 |
// { dg-do run }
|
// { dg-do run }
|
// prms-id: 2846
|
// prms-id: 2846
|
|
|
extern "C" int printf(const char *, ...);
|
extern "C" int printf(const char *, ...);
|
extern "C" void exit(int);
|
extern "C" void exit(int);
|
|
|
class A;
|
class A;
|
class B;
|
class B;
|
|
|
int c;
|
int c;
|
|
|
class A {
|
class A {
|
public:
|
public:
|
|
|
A(void){}
|
A(void){}
|
A(const A&){}
|
A(const A&){}
|
A(const B&);
|
A(const B&);
|
|
|
virtual ~A(void){}
|
virtual ~A(void){}
|
|
|
virtual void print(void) const {
|
virtual void print(void) const {
|
printf("A::print\n");
|
printf("A::print\n");
|
printf("FAIL\n");
|
printf("FAIL\n");
|
exit(1);
|
exit(1);
|
}
|
}
|
B compute(void) const;
|
B compute(void) const;
|
};
|
};
|
|
|
class B : private A {
|
class B : private A {
|
friend class A;
|
friend class A;
|
public:
|
public:
|
|
|
virtual ~B(void){}
|
virtual ~B(void){}
|
|
|
void print(void) const {
|
void print(void) const {
|
++c;
|
++c;
|
printf("B::print\n");
|
printf("B::print\n");
|
}
|
}
|
|
|
private:
|
private:
|
B(const A& x, int){}
|
B(const A& x, int){}
|
};
|
};
|
|
|
A::A(const B& s) {
|
A::A(const B& s) {
|
s.print();
|
s.print();
|
}
|
}
|
|
|
B A::compute(void) const {
|
B A::compute(void) const {
|
B sub(*this, 1);
|
B sub(*this, 1);
|
return sub;
|
return sub;
|
}
|
}
|
|
|
int main ()
|
int main ()
|
{
|
{
|
A titi;
|
A titi;
|
A toto = titi.compute();
|
A toto = titi.compute();
|
if (c != 1)
|
if (c != 1)
|
{
|
{
|
printf ("FAIL\n");
|
printf ("FAIL\n");
|
return 1;
|
return 1;
|
}
|
}
|
else
|
else
|
{
|
{
|
printf("PASS\n");
|
printf("PASS\n");
|
return 0;
|
return 0;
|
}
|
}
|
}
|
}
|
|
|
© copyright 1999-2024
OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.