diff options
author | Richard Guenther <rguenther@suse.de> | 2009-12-11 18:00:24 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2009-12-11 18:00:24 +0000 |
commit | ae2cac711f13fb778f5065b160e5b27b56c0f129 (patch) | |
tree | 9de40a53031617104951f6fd37441cc49b1fae6f /gcc | |
parent | 8246b3148ea869d8f2cc2d420312feed719943db (diff) | |
download | gcc-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/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 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; } } } |