* gimple.c (gimple_types_compatible_p): Check type qualifications
before merging pointer to complete and pointer to incomplete type.
* lto-symtab.c (lto_symtab_resolve_symbols): For commons make sure
we use our own resolution algorithm. The gold linker plugin
doesn't do the job we want it to do here.
lto/
* lto.c (read_cgraph_and_symbols): Do not collect.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159696
138bc75d-0d04-0410-961f-
82ee72b054a4
+2010-05-22 Richard Guenther <rguenther@suse.de>
+
+ * gimple.c (gimple_types_compatible_p): Check type qualifications
+ before merging pointer to complete and pointer to incomplete type.
+ * lto-symtab.c (lto_symtab_resolve_symbols): For commons make sure
+ we use our own resolution algorithm. The gold linker plugin
+ doesn't do the job we want it to do here.
+
2010-05-22 Anatoly Sokolov <aesok@post.ru>
* config/sparc/sparc.h (GO_IF_MODE_DEPENDENT_ADDRESS): Remove.
&& RECORD_OR_UNION_TYPE_P (TREE_TYPE (t1))
&& (!COMPLETE_TYPE_P (TREE_TYPE (t1))
|| !COMPLETE_TYPE_P (TREE_TYPE (t2)))
+ && TYPE_QUALS (TREE_TYPE (t1)) == TYPE_QUALS (TREE_TYPE (t2))
&& compare_type_names_p (TYPE_MAIN_VARIANT (TREE_TYPE (t1)),
TYPE_MAIN_VARIANT (TREE_TYPE (t2)), true))
{
/* Replace the pointed-to incomplete type with the
- complete one. */
+ complete one.
+ ??? This simple name-based merging causes at least some
+ of the ICEs in canonicalizing FIELD_DECLs during stmt
+ read. For example in GCC we have two different struct deps
+ and we mismatch the use in struct cpp_reader in sched-int.h
+ vs. mkdeps.c. Of course the whole exercise is for TBAA
+ with structs which contain pointers to incomplete types
+ in one unit and to complete ones in another. So we
+ probably should merge these types only with more context. */
if (COMPLETE_TYPE_P (TREE_TYPE (t2)))
TREE_TYPE (t1) = TREE_TYPE (t2);
else
if (TREE_CODE (e->decl) == FUNCTION_DECL)
e->node = cgraph_get_node (e->decl);
else if (TREE_CODE (e->decl) == VAR_DECL)
- e->vnode = varpool_get_node (e->decl);
+ {
+ e->vnode = varpool_get_node (e->decl);
+ /* The LTO plugin for gold doesn't handle common symbols
+ properly. Let us choose manually. */
+ if (DECL_COMMON (e->decl))
+ e->resolution = LDPR_UNKNOWN;
+ }
}
e = (lto_symtab_entry_t) *slot;
+2010-05-22 Richard Guenther <rguenther@suse.de>
+
+ * lto.c (read_cgraph_and_symbols): Do not collect.
+
2010-05-20 Jan Hubicka <jh@suse.cz>
* lto.c (promote_var, promote_fn): New functions.
lto_obj_file_close (current_lto_file);
current_lto_file = NULL;
- ggc_collect ();
+ /* ??? We'd want but can't ggc_collect () here as the type merging
+ code in gimple.c uses hashtables that are not ggc aware. */
}
if (resolution_file_name)