diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e543df5d392163058e8ee5f3d424d2d5ef02708d..6b4225351b6d64a29e65ea5a53dca38ddbd2c45d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2004-09-24  Andrew MacLeod  <amacleod@redhat.com>
+
+	PR tree-optimzation/17517
+	* g++.dg/tree-ssa/pr17517.C: New Test.
+
 2004-08-24  Nathan Sidwell  <nathan@codesourcery.com>
 
 	PR c++/16889
diff --git a/gcc/testsuite/g++.dg/tree-ssa/pr17517.C b/gcc/testsuite/g++.dg/tree-ssa/pr17517.C
new file mode 100644
index 0000000000000000000000000000000000000000..bcd5e91dbae880fbb48936b9a58e0377d129f682
--- /dev/null
+++ b/gcc/testsuite/g++.dg/tree-ssa/pr17517.C
@@ -0,0 +1,32 @@
+// Test PR 17517.  Test case provided by Serge Belyshev.
+ 
+ /* { dg-do compile } */
+ /* { dg-options "-O2" } */
+
+
+extern void foo ();
+
+struct Ptr {
+  int * ptr;
+  Ptr () { ptr = 0; }
+  ~Ptr() { delete ptr; }
+  Ptr &operator= (int * p) { ptr = p; return *this; }
+};
+
+int *new_checker () { foo (); return 0; }
+
+void pipe (int c)
+{
+  Ptr checker;
+  
+  foo ();
+  for (;;)
+    {
+    switch (c)
+      {
+    case '-':
+      checker = new_checker ();
+      break;
+      }
+    }
+}