summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/torture/pr40834.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/g++.dg/torture/pr40834.C')
-rw-r--r--gcc/testsuite/g++.dg/torture/pr40834.C52
1 files changed, 52 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/torture/pr40834.C b/gcc/testsuite/g++.dg/torture/pr40834.C
new file mode 100644
index 000000000..67d302853
--- /dev/null
+++ b/gcc/testsuite/g++.dg/torture/pr40834.C
@@ -0,0 +1,52 @@
+/* { 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;
+}