Commit bd9eb5da by Richard Guenther Committed by Richard Biener

gimple.c (gimple_types_compatible_p): Check type qualifications before merging…

gimple.c (gimple_types_compatible_p): Check type qualifications before merging pointer to complete and pointer to...

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.

	lto/
	* lto.c (read_cgraph_and_symbols): Do not collect.

From-SVN: r159696
parent 7c9b8fb9
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.
......
......@@ -3481,11 +3481,20 @@ gimple_types_compatible_p (tree t1, tree t2)
&& 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
......
......@@ -463,7 +463,13 @@ lto_symtab_resolve_symbols (void **slot)
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.
......
......@@ -1633,7 +1633,8 @@ read_cgraph_and_symbols (unsigned nfiles, const char **fnames)
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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment