blob: 2b5b5447834986e0b9fb9cf19d3d8a6c7f912ee3 [file] [log] [blame]
// { dg-do compile }
// { dg-options "-O2" }
class A;
class B
{
A *mRawPtr;
public:
void *StartAssignment___trans_tmp_2;
A **
m_fn1 ()
{
StartAssignment___trans_tmp_2 = &mRawPtr;
return reinterpret_cast<A **> (StartAssignment___trans_tmp_2);
}
};
class C
{
public:
C (B &p1) : mTargetSmartPtr (p1) {}
operator A **() { return mTargetSmartPtr.m_fn1 (); }
B &mTargetSmartPtr;
};
class A
{
public:
A ();
};
class D
{
D (bool);
B mNewEntry;
virtual int m_fn2 ();
};
C
fn1 (B &p1)
{
return p1;
}
void
fn2 (bool, A **)
{
new A;
}
D::D (bool p1)
{
A **a = fn1 (mNewEntry);
fn2 (p1, a);
}