summaryrefslogtreecommitdiff
path: root/gcc/gimple.c
diff options
context:
space:
mode:
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2010-05-22 12:56:53 +0000
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2010-05-22 12:56:53 +0000
commitca3e35a1bcef5d17ca0ca9ec702aa4e91e0c7d44 (patch)
tree75a0267d14937ac168a33af993b2c8c63ed5a1d2 /gcc/gimple.c
parenta96bd516338df9c61aa2692f140af6acc497eb88 (diff)
downloadgcc-ca3e35a1bcef5d17ca0ca9ec702aa4e91e0c7d44.tar.gz
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159696 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/gimple.c')
-rw-r--r--gcc/gimple.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/gcc/gimple.c b/gcc/gimple.c
index 1ff9b3a63f6..e5dc184d460 100644
--- a/gcc/gimple.c
+++ b/gcc/gimple.c
@@ -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