diff --git a/gdb/testsuite/gdb.cp/anon-ns.cc b/gdb/testsuite/gdb.cp/anon-ns.cc
index 26bc307..31b05c9 100644
--- a/gdb/testsuite/gdb.cp/anon-ns.cc
+++ b/gdb/testsuite/gdb.cp/anon-ns.cc
@@ -17,76 +17,11 @@
 
    Contributed by Red Hat, originally written by Keith Seitz.  */
 
-#include <stdlib.h>
-
-namespace
-{
-  void doit1 (void) { } // doit1(void)
-  void doit1 (int a) { } // doit1(int)
-  void doit1 (char *a) { } // doit1(char *)
-
-  class one
-  {
-  public:
-    one (void) { } // one::one(void)
-    one (int a) { } // one::one(int)
-    one (char *a) { } // one::one(char *)
-    static void doit (void) { } // one::doit(void)
-  };
-
-  namespace A
-  {
-    void doit2 (void) { } // A::doit2(void)
-    void doit2 (int a) { } // A::doit2(int)
-    void doit2 (char *a) { } // A::doit2(char *)
-
-    class two
-    {
-    public:
-      two (void) { } // A::two::two(void)
-      two (int a) { } // A::two::two(int)
-      two (char *a) { } // A::two::two(char *)
-      static void doit (void) { } // A::two::doit(void)
-    };
-
-    namespace
-    {
-      namespace
-      {
-	void doit3 (void) { } // A::doit3(void)
-	void doit3 (int a) { } // A::doit3(int)
-	void doit3 (char *a) { } // A::doit3(char *)
-
-	class three
-	{
-	public:
-	  three (void) { } // A::three::three(void)
-	  three (int a) { } // A::three::three(int)
-	  three (char *a) { } // A::three::three(char *)
-	  static void doit (void) { } // A::three::doit(void)
-	};
-      }
-    }
-  }
-}
+extern void doit (void);
 
 int
 main (void)
 {
-  one a, b (3), c (static_cast<char *> (NULL));
-  one::doit ();
-  A::two d, e (3), f (static_cast<char *> (NULL));
-  A::two::doit ();
-  A::three g, h (3), i (static_cast<char *> (NULL));
-  A::three::doit ();
-  doit1 ();
-  doit1 (3);
-  doit1 (static_cast<char *> (NULL));
-  A::doit2 ();
-  A::doit2 (3);
-  A::doit2 (static_cast<char *> (NULL));
-  A::doit3 ();
-  A::doit3 (3);
-  A::doit3 (static_cast<char *> (NULL));
+  doit ();
   return 0;
 }
diff --git a/gdb/testsuite/gdb.cp/anon-ns.exp b/gdb/testsuite/gdb.cp/anon-ns.exp
index 0cbb71b..f8d4970 100644
--- a/gdb/testsuite/gdb.cp/anon-ns.exp
+++ b/gdb/testsuite/gdb.cp/anon-ns.exp
@@ -19,9 +19,9 @@
 
 if {[skip_cplus_tests]} { continue }
 
-standard_testfile .cc
+standard_testfile .cc anon-ns2.cc
 
-if {[prepare_for_testing $testfile $testfile $srcfile {c++ debug}]} {
+if {[prepare_for_testing $testfile $testfile "$srcfile $srcfile2" {c++ debug}]} {
     return -1
 }
 
diff --git a/gdb/testsuite/gdb.cp/anon-ns2.cc b/gdb/testsuite/gdb.cp/anon-ns2.cc
new file mode 100644
index 0000000..0d29d9f
--- /dev/null
+++ b/gdb/testsuite/gdb.cp/anon-ns2.cc
@@ -0,0 +1,91 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+   Copyright 2011-2014 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+   Contributed by Red Hat, originally written by Keith Seitz.  */
+
+#include <stdlib.h>
+
+namespace
+{
+  void doit1 (void) { } // doit1(void)
+  void doit1 (int a) { } // doit1(int)
+  void doit1 (char *a) { } // doit1(char *)
+
+  class one
+  {
+  public:
+    one (void) { } // one::one(void)
+    one (int a) { } // one::one(int)
+    one (char *a) { } // one::one(char *)
+    static void doit (void) { } // one::doit(void)
+  };
+
+  namespace A
+  {
+    void doit2 (void) { } // A::doit2(void)
+    void doit2 (int a) { } // A::doit2(int)
+    void doit2 (char *a) { } // A::doit2(char *)
+
+    class two
+    {
+    public:
+      two (void) { } // A::two::two(void)
+      two (int a) { } // A::two::two(int)
+      two (char *a) { } // A::two::two(char *)
+      static void doit (void) { } // A::two::doit(void)
+    };
+
+    namespace
+    {
+      namespace
+      {
+	void doit3 (void) { } // A::doit3(void)
+	void doit3 (int a) { } // A::doit3(int)
+	void doit3 (char *a) { } // A::doit3(char *)
+
+	class three
+	{
+	public:
+	  three (void) { } // A::three::three(void)
+	  three (int a) { } // A::three::three(int)
+	  three (char *a) { } // A::three::three(char *)
+	  static void doit (void) { } // A::three::doit(void)
+	};
+      }
+    }
+  }
+}
+
+void
+doit (void)
+{
+  one a, b (3), c (static_cast<char *> (NULL));
+  one::doit ();
+  A::two d, e (3), f (static_cast<char *> (NULL));
+  A::two::doit ();
+  A::three g, h (3), i (static_cast<char *> (NULL));
+  A::three::doit ();
+  doit1 ();
+  doit1 (3);
+  doit1 (static_cast<char *> (NULL));
+  A::doit2 ();
+  A::doit2 (3);
+  A::doit2 (static_cast<char *> (NULL));
+  A::doit3 ();
+  A::doit3 (3);
+  A::doit3 (static_cast<char *> (NULL));
+}
