summaryrefslogtreecommitdiff
path: root/gcc/lto-symtab.c
diff options
context:
space:
mode:
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2010-07-20 12:05:59 +0000
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>2010-07-20 12:05:59 +0000
commit003c7ce58f3ba2b5d755bcbe64b7218e4f17e31b (patch)
treebde8f9d8031adf6d703dcc9a8bdba382267ca985 /gcc/lto-symtab.c
parentcfe3cae32d819232826fded4bab11bca6d79c943 (diff)
downloadgcc-003c7ce58f3ba2b5d755bcbe64b7218e4f17e31b.tar.gz
2010-07-20 Richard Guenther <rguenther@suse.de>
* lto-symtab.c (lto_symtab_merge): Use gimple_types_compatible_p. (lto_symtab_merge_decls_2): Likewise. * gimple.h (gimple_types_compatible_p): Declare. * gimple.c (gimple_queue_type_fixup): Remove. (gimple_fixup_complete_and_incomplete_subtype_p): Likewise. (gimple_compatible_complete_and_incomplete_type_p): New function. (gimple_types_compatible_p): Adjust. (gimple_register_type): Remove type fixup code. (print_gimple_types_stats): Adjust. (free_gimple_type_tables): Likewise. * lto-streamer-in.c (input_gimple_stmt): Use gimple_types_compatible_p. * tree-ssa.c (useless_type_conversion_p): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@162330 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/lto-symtab.c')
-rw-r--r--gcc/lto-symtab.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/gcc/lto-symtab.c b/gcc/lto-symtab.c
index 978bccb90d7..f7bb9b6e47a 100644
--- a/gcc/lto-symtab.c
+++ b/gcc/lto-symtab.c
@@ -348,7 +348,8 @@ lto_symtab_merge (lto_symtab_entry_t prevailing, lto_symtab_entry_t entry)
if (TREE_CODE (decl) == FUNCTION_DECL)
{
- if (TREE_TYPE (prevailing_decl) != TREE_TYPE (decl))
+ if (!gimple_types_compatible_p (TREE_TYPE (prevailing_decl),
+ TREE_TYPE (decl), false))
/* If we don't have a merged type yet...sigh. The linker
wouldn't complain if the types were mismatched, so we
probably shouldn't either. Just use the type from
@@ -381,7 +382,7 @@ lto_symtab_merge (lto_symtab_entry_t prevailing, lto_symtab_entry_t entry)
fixup process didn't yet run. */
prevailing_type = gimple_register_type (prevailing_type);
type = gimple_register_type (type);
- if (prevailing_type != type)
+ if (!gimple_types_compatible_p (prevailing_type, type, false))
{
if (COMPLETE_TYPE_P (type))
return false;
@@ -406,7 +407,8 @@ lto_symtab_merge (lto_symtab_entry_t prevailing, lto_symtab_entry_t entry)
if (TREE_CODE (tem1) != TREE_CODE (tem2))
return false;
- if (gimple_register_type (tem1) != gimple_register_type (tem2))
+ if (!gimple_types_compatible_p (gimple_register_type (tem1),
+ gimple_register_type (tem2), false))
return false;
}
@@ -600,7 +602,8 @@ lto_symtab_merge_decls_2 (void **slot)
/* Diagnose all mismatched re-declarations. */
for (i = 0; VEC_iterate (tree, mismatches, i, decl); ++i)
{
- if (TREE_TYPE (prevailing->decl) != TREE_TYPE (decl))
+ if (!gimple_types_compatible_p (TREE_TYPE (prevailing->decl),
+ TREE_TYPE (decl), false))
diagnosed_p |= warning_at (DECL_SOURCE_LOCATION (decl), 0,
"type of %qD does not match original "
"declaration", decl);