pr17400.C: New testcase.
authorAndrew MacLeod <amacleod@redhat.com>
Mon, 13 Sep 2004 20:40:44 +0000 (20:40 +0000)
committerAndrew Macleod <amacleod@gcc.gnu.org>
Mon, 13 Sep 2004 20:40:44 +0000 (20:40 +0000)
2004-09-13  Andrew MacLeod  <amacleod@redhat.com>

* g++.dg/tree-ssa/pr17400.C: New testcase.

From-SVN: r87449

gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/tree-ssa/pr17400.C [new file with mode: 0644]

index 4736e13e528c7470775061d08954dd029952693d..e4bea8c9b814442472e5db451087e7136ca1a8da 100644 (file)
@@ -1,3 +1,7 @@
+2004-09-13  Andrew MacLeod  <amacleod@redhat.com>
+
+       * g++.dg/tree-ssa/pr17400.C: New testcase.
+
 2004-09-13  James E Wilson  <wilson@specifixinc.com>
 
        * gcc.target/mips/sb1-1.c: New testcase.
diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr17400.C b/gcc/testsuite/g++.dg/tree-ssa/pr17400.C
new file mode 100644 (file)
index 0000000..a6619a8
--- /dev/null
@@ -0,0 +1,53 @@
+// Test PR 17400.  Test case provided by Serge Belyshev.  
+
+/* { dg-do compile } */
+/* { dg-options "-O1" } */
+
+
+void inc (int &);
+bool dec_test (int &);
+
+struct A
+{
+  int c;
+  
+  friend void AddRef (A * p)
+  {
+    inc (p->c);
+  }
+  
+  friend void Release (A * p)
+  {
+    if(dec_test (p->c))
+      delete p;
+  }
+};
+
+struct B
+{
+  B (A *p) : obj(p)
+  {
+    AddRef (obj);
+  }
+  
+  ~B()
+  {
+    Release (obj);
+  }
+  
+  void swap (B &rhs)
+  {
+    A * tmp = obj;
+    obj = rhs.obj;
+    rhs.obj = tmp;
+  }
+  
+  A *obj;
+};
+
+void bar (A *p1, A* p2)
+{
+    B px (p1);
+    B px2 (p2);
+    px.swap (px2);
+}