mirror of git://gcc.gnu.org/git/gcc.git
re PR c++/52643 (Stack overflow ICE in cc1plus when templates, exceptions, and continue out of try used)
2012-10-14 Paolo Carlini <paolo.carlini@oracle.com> PR c++/52643 * g++.dg/opt/pr52643.C: New. From-SVN: r192432
This commit is contained in:
parent
7159e6380c
commit
ca6729e2ed
|
|
@ -1,3 +1,8 @@
|
|||
2012-10-14 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/52643
|
||||
* g++.dg/opt/pr52643.C: New.
|
||||
|
||||
2012-10-12 Oleg Endo <olegendo@gcc.gnu.org>
|
||||
|
||||
PR target/54602
|
||||
|
|
|
|||
|
|
@ -0,0 +1,64 @@
|
|||
// PR c++/52643
|
||||
// { dg-options "-O" }
|
||||
|
||||
template<class T> class already_AddRefd {};
|
||||
|
||||
template<class T>
|
||||
class ObjRef
|
||||
{
|
||||
public:
|
||||
ObjRef() {}
|
||||
|
||||
ObjRef(const already_AddRefd<T> aar) {}
|
||||
|
||||
~ObjRef()
|
||||
{
|
||||
T* mPtr;
|
||||
mPtr->release_ref();
|
||||
}
|
||||
|
||||
operator T* () const
|
||||
{
|
||||
return __null;
|
||||
}
|
||||
|
||||
template<class U>
|
||||
void operator= (const already_AddRefd<U>& newAssign) {}
|
||||
};
|
||||
|
||||
class MyRetClass {
|
||||
public:
|
||||
void release_ref();
|
||||
};
|
||||
|
||||
class MyClass
|
||||
{
|
||||
void appendChild();
|
||||
void getTripleOutOfByPredicate();
|
||||
already_AddRefd<MyRetClass> getNextTriple();
|
||||
};
|
||||
|
||||
void
|
||||
MyClass::getTripleOutOfByPredicate()
|
||||
{
|
||||
ObjRef<MyRetClass> t (getNextTriple());
|
||||
|
||||
if (t == __null)
|
||||
throw MyRetClass();
|
||||
}
|
||||
|
||||
void
|
||||
MyClass::appendChild()
|
||||
{
|
||||
while (1)
|
||||
{
|
||||
try
|
||||
{
|
||||
ObjRef<MyRetClass> t (getNextTriple());
|
||||
continue;
|
||||
}
|
||||
catch (MyRetClass)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue