diff options
author | Richard Guenther <rguenther@suse.de> | 2010-11-24 17:06:41 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2010-11-24 17:06:41 +0000 |
commit | ecf9b8aefcf233047b6afb3e1bdafb2ce015d880 (patch) | |
tree | 3cd1fcbc2eae962d1529f94d63558293153dcd3f /gcc/lto-symtab.c | |
parent | 0d40d51cf5d58f791e23b201b5100c8db4063ad3 (diff) | |
download | gcc-ecf9b8aefcf233047b6afb3e1bdafb2ce015d880.zip gcc-ecf9b8aefcf233047b6afb3e1bdafb2ce015d880.tar.gz gcc-ecf9b8aefcf233047b6afb3e1bdafb2ce015d880.tar.bz2 |
re PR lto/43218 ([LTO] Conflicting function types cause ICE)
2010-11-24 Richard Guenther <rguenther@suse.de>
PR lto/43218
* lto-symtab.c (lto_cgraph_replace_node): Mark edges with
conflicting function signatures as non-inlineable.
* gcc.dg/lto/20100423-1_0.c: Enable for all LTO modes.
From-SVN: r167122
Diffstat (limited to 'gcc/lto-symtab.c')
-rw-r--r-- | gcc/lto-symtab.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/gcc/lto-symtab.c b/gcc/lto-symtab.c index b83c75e..4484d93 100644 --- a/gcc/lto-symtab.c +++ b/gcc/lto-symtab.c @@ -210,6 +210,7 @@ lto_cgraph_replace_node (struct cgraph_node *node, { struct cgraph_edge *e, *next; bool no_aliases_please = false; + bool compatible_p; if (cgraph_dump_file) { @@ -240,10 +241,19 @@ lto_cgraph_replace_node (struct cgraph_node *node, } /* Redirect all incoming edges. */ + compatible_p + = gimple_types_compatible_p (TREE_TYPE (TREE_TYPE (prevailing_node->decl)), + TREE_TYPE (TREE_TYPE (node->decl)), GTC_DIAG); for (e = node->callers; e; e = next) { next = e->next_caller; cgraph_redirect_edge_callee (e, prevailing_node); + /* If there is a mismatch between the supposed callee return type and + the real one do not attempt to inline this function. + ??? We really need a way to match function signatures for ABI + compatibility and perform related promotions at inlining time. */ + if (!compatible_p) + e->call_stmt_cannot_inline_p = 1; } /* Redirect incomming references. */ ipa_clone_refering (prevailing_node, NULL, &node->ref_list); |