/* { dg-do run } */ extern "C" void abort (void); class XalanDOMString { public: int y; }; class XObject { public: const XalanDOMString& str() const { return x; } XalanDOMString x; }; class XObjectPtr { public: XObjectPtr(const XObjectPtr& theSource) { m_xobjectPtr = theSource.m_xobjectPtr; } const XObject* operator->() const { return m_xobjectPtr; }; XObjectPtr(XObject *p) { m_xobjectPtr = p; } XObject* m_xobjectPtr; }; class FunctionSubstringBefore { public: int execute( const XObjectPtr arg1) const { const XalanDOMString& theFirstString = arg1->str(); return theFirstString.y; } }; int main () { XObject x; XObjectPtr y (&x); x.x.y = -1; FunctionSubstringBefore z; if (z.execute (y) != -1) abort (); return 0; }