re PR lto/41658 (Execution testsuite fails with -O2 -fwhopr)
authorRichard Guenther <rguenther@suse.de>
Fri, 11 Dec 2009 18:00:24 +0000 (18:00 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 11 Dec 2009 18:00:24 +0000 (18:00 +0000)
2009-12-11  Richard Guenther  <rguenther@suse.de>

PR lto/41658
PR lto/41657
* lto-streamer-out.c (write_global_stream): Do not make decls
weak but resort to TREE_ASM_WRITTEN to avoid multiple definitions.
Make sure to mark all decls that we have written.

From-SVN: r155174

gcc/ChangeLog
gcc/lto-streamer-out.c

index 4f7c4d5e63a6321b4d7f1b8394ed92e4dd620755..ba3f0d3610158ffa1cd7bf1a37a84e92f590c964 100644 (file)
@@ -1,3 +1,11 @@
+2009-12-11  Richard Guenther  <rguenther@suse.de>
+
+       PR lto/41658
+       PR lto/41657
+       * lto-streamer-out.c (write_global_stream): Do not make decls
+       weak but resort to TREE_ASM_WRITTEN to avoid multiple definitions.
+       Make sure to mark all decls that we have written.
+
 2009-12-11  Sebastian Andrzej Siewior  <bigeasy@linutronix.de>
 
        PR target/36047
index 49877ff1a3989df112568281aa94417f5e9f3cda..920cd2708650df79392cac900915a581f06a7bb1 100644 (file)
@@ -2147,35 +2147,20 @@ write_global_stream (struct output_block *ob,
     {
       t = lto_tree_ref_encoder_get_tree (encoder, index);
       if (!lto_streamer_cache_lookup (ob->writer_cache, t, NULL))
-       {
-         if (flag_wpa)
-           {
-             /* In WPA we should not emit multiple definitions of the
-                same symbol to all the files in the link set.  If
-                T had already been emitted as the pervailing definition
-                in one file, emit it as an external reference in the
-                others.  */
-             /* FIXME lto.  We should check if T belongs to the
-                file we are writing to.  */
-             if (TREE_CODE (t) == VAR_DECL
-                 && TREE_PUBLIC (t)
-                 && !DECL_EXTERNAL (t))
-               {
-                 /* FIXME lto.  Make DECLS_ALREADY_EMITTED an argument
-                    to this function so it can be freed up afterwards.
-                    Alternately, assign global symbols to cgraph
-                    node sets.  */
-                 static struct pointer_set_t *decls_already_emitted = NULL;
-
-                 if (decls_already_emitted == NULL)
-                   decls_already_emitted = pointer_set_create ();
-
-                 if (pointer_set_insert (decls_already_emitted, t))
-                   make_decl_one_only (t, DECL_ASSEMBLER_NAME (t));
-               }
-           }
+       lto_output_tree (ob, t, false);
 
-         lto_output_tree (ob, t, false);
+      if (flag_wpa)
+       {
+         /* In WPA we should not emit multiple definitions of the
+            same symbol to all the files in the link set.  If
+            T had already been emitted as the pervailing definition
+            in one file, do not emit it in the others.  */
+         /* FIXME lto.  We should check if T belongs to the
+            file we are writing to.  */
+         if (TREE_CODE (t) == VAR_DECL
+             && TREE_PUBLIC (t)
+             && !DECL_EXTERNAL (t))
+           TREE_ASM_WRITTEN (t) = 1;
        }
     }
 }