PR c++/17775
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 3 Oct 2005 17:21:40 +0000 (17:21 +0000)
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 3 Oct 2005 17:21:40 +0000 (17:21 +0000)
* repo.c: Include flags.h.
(finish_repo): Add -frandom-seed to the arguments.
PR c++/17775
* g++.dg/template/repo4.C: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@104898 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/repo.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/template/repo4.C [new file with mode: 0644]

index 0680b67..6ccc3f9 100644 (file)
@@ -1,3 +1,9 @@
+2005-10-03  Mark Mitchell  <mark@codesourcery.com>
+
+       PR c++/17775
+       * repo.c: Include flags.h.
+       (finish_repo): Add -frandom-seed to the arguments.
+
 2005-10-02  Mark Mitchell  <mark@codesourcery.com>
 
        PR c++/22621
index b3d327d..eee3b87 100644 (file)
@@ -36,6 +36,7 @@ Boston, MA 02110-1301, USA.  */
 #include "obstack.h"
 #include "toplev.h"
 #include "diagnostic.h"
+#include "flags.h"
 
 static char *extract_string (char **);
 static const char *get_base_filename (const char *);
@@ -239,7 +240,16 @@ finish_repo (void)
   fprintf (repo_file, "D %s\n", dir);
   args = getenv ("COLLECT_GCC_OPTIONS");
   if (args)
-    fprintf (repo_file, "A %s\n", args);
+    {
+      fprintf (repo_file, "A %s", args);
+      /* If -frandom-seed is not among the ARGS, then add the value
+        that we chose.  That will ensure that the names of types from
+        anonymous namespaces will get the same mangling when this
+        file is recompiled.  */
+      if (!strstr (args, "'-frandom-seed="))
+       fprintf (repo_file, " '-frandom-seed=%s'", flag_random_seed);
+      fprintf (repo_file, "\n");
+    }
 
   for (t = pending_repo; t; t = TREE_CHAIN (t))
     {
index ea8a2a7..ecb578e 100644 (file)
@@ -1,3 +1,8 @@
+2005-10-03  Mark Mitchell  <mark@codesourcery.com>
+
+       PR c++/17775
+       * g++.dg/template/repo4.C: New test.
+
 2005-10-03  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
 
        PR libfortran/19308
diff --git a/gcc/testsuite/g++.dg/template/repo4.C b/gcc/testsuite/g++.dg/template/repo4.C
new file mode 100644 (file)
index 0000000..bd07f95
--- /dev/null
@@ -0,0 +1,16 @@
+// PR c++/17775
+// { dg-options "-frepo" }
+// { dg-final { cleanup-repo-files } }
+
+namespace { 
+  struct Foo {}; 
+} 
+template <typename Tp> 
+void foo(Tp) {} 
+int 
+main() 
+{ 
+  foo(Foo()); 
+}