diff options
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/lto-streamer-out.c | 41 |
2 files changed, 21 insertions, 28 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4f7c4d5e63a..ba3f0d36101 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 49877ff1a39..920cd270865 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; } } } |