URL
https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk
Only display areas with differences |
Details |
Blame |
View Log
Rev 305 |
Rev 338 |
// { dg-do run }
|
// { dg-do run }
|
// GROUPS passed destructors
|
// GROUPS passed destructors
|
#include
|
#include
|
|
|
int destruct = 0;
|
int destruct = 0;
|
|
|
class bla {
|
class bla {
|
|
|
public:
|
public:
|
|
|
inline bla(const char * jim) { ; }
|
inline bla(const char * jim) { ; }
|
|
|
inline ~bla() { destruct++; if (destruct == 2) printf ("PASS\n");}
|
inline ~bla() { destruct++; if (destruct == 2) printf ("PASS\n");}
|
};
|
};
|
|
|
class ulk {
|
class ulk {
|
|
|
public:
|
public:
|
|
|
inline ulk() {}
|
inline ulk() {}
|
inline ~ulk() {}
|
inline ~ulk() {}
|
|
|
void funk(const bla & bob) { ;}
|
void funk(const bla & bob) { ;}
|
// ^ interestingly, the code compiles right if
|
// ^ interestingly, the code compiles right if
|
// this & is deleted (and therefore the parameter
|
// this & is deleted (and therefore the parameter
|
// passed as value)
|
// passed as value)
|
};
|
};
|
|
|
int main() {
|
int main() {
|
|
|
ulk dumm;
|
ulk dumm;
|
|
|
dumm.funk(bla("laberababa")); // this compiles correctly
|
dumm.funk(bla("laberababa")); // this compiles correctly
|
|
|
dumm.funk((bla)"laberababa"); // this produces incorrect code -
|
dumm.funk((bla)"laberababa"); // this produces incorrect code -
|
// the temporary instance of
|
// the temporary instance of
|
// the class "bla" is constructed
|
// the class "bla" is constructed
|
// but never destructed...
|
// but never destructed...
|
|
|
|
|
}
|
}
|
|
|
© copyright 1999-2024
OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.