[Bug lto/53572] Some public symbols don't get to serialized LTO
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Jun 4 14:38:00 GMT 2012
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53572
--- Comment #4 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-06-04 14:38:06 UTC ---
(In reply to comment #3)
> I do not have linker plugin enabled setup handy at the moment, but the
> following patch should fix it:
> Index: cgraph.h
> ===================================================================
> --- cgraph.h (revision 188138)
> +++ cgraph.h (working copy)
> @@ -1126,7 +1126,8 @@ varpool_can_remove_if_no_refs (struct va
> if (DECL_EXTERNAL (node->symbol.decl))
> return true;
> return (!node->symbol.force_output &&
> !node->symbol.used_from_other_partition
> - && (DECL_COMDAT (node->symbol.decl)
> + && ((DECL_COMDAT (node->symbol.decl)
> + && symtab_used_from_object_file_p ((symtab_node) node))
&& !symtab_used_from_object_file_p
I suppose. I would have expected used_from_other_partition to be true
in this case. Also the 4.7 branch looks suspiciously different from
this, referencing flag_toplevel_reorder ...
The adjusted as above patch works on trunk though.
But I really would say "object file"s are also another "partition".
> || !node->symbol.externally_visible
> || DECL_HAS_VALUE_EXPR_P (node->symbol.decl)));
> }
>
> I am testing this patch for mainline.
> As discussed on IRC, this patch can have negative effect on V1 linker API
> setups: here all comdats appears to be externally visible and thus they will be
> forced to output.
If as comdat the linker should eliminate them.
> But perhaps it is now resonable to expect V2 linker API even for GCC 4.7 based
> setups for sane LTO with C++? We already mention in release notes that V1 API
> is bad idea...
Well, sure - assuming that we have a V2 capable linker is ok I guess. In the
end we should simply annotate the resolution file with the linker capability,
thus extend the file-format to include a one-line header with a version.
Richard.
> Honza
More information about the Gcc-bugs
mailing list