aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2009-12-11 18:00:24 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2009-12-11 18:00:24 +0000
commitae2cac711f13fb778f5065b160e5b27b56c0f129 (patch)
tree9de40a53031617104951f6fd37441cc49b1fae6f /gcc
parent8246b3148ea869d8f2cc2d420312feed719943db (diff)
downloadgcc-ae2cac711f13fb778f5065b160e5b27b56c0f129.zip
gcc-ae2cac711f13fb778f5065b160e5b27b56c0f129.tar.gz
gcc-ae2cac711f13fb778f5065b160e5b27b56c0f129.tar.bz2
re PR lto/41658 (Execution testsuite fails with -O2 -fwhopr)
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/lto-streamer-out.c41
2 files changed, 21 insertions, 28 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4f7c4d5..ba3f0d3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/lto-streamer-out.c b/gcc/lto-streamer-out.c
index 49877ff..920cd27 100644
--- a/gcc/lto-streamer-out.c
+++ b/gcc/lto-streamer-out.c
@@ -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;
}
}
}