OSDN Git Service

2010-11-24 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 24 Nov 2010 17:06:41 +0000 (17:06 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 24 Nov 2010 17:06:41 +0000 (17:06 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@167122 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/lto-symtab.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/lto/20100423-1_0.c

index d6cd569..7dfe5f4 100644 (file)
@@ -1,3 +1,9 @@
+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.
+
 2010-11-24  Jakub Jelinek  <jakub@redhat.com>
 
        PR rtl-optimization/46614
index b83c75e..4484d93 100644 (file)
@@ -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);
index feae590..475df8f 100644 (file)
@@ -1,3 +1,8 @@
+2010-11-24  Richard Guenther  <rguenther@suse.de>
+
+       PR lto/43218
+       * gcc.dg/lto/20100423-1_0.c: Enable for all LTO modes.
+
 2010-11-24  Jakub Jelinek  <jakub@redhat.com>
 
        PR rtl-optimization/46614
index eb93165..1963c1f 100644 (file)
@@ -1,5 +1,4 @@
 /* { dg-lto-do run } */
-/* { dg-lto-options {{-O2 -flto -flto-partition=none}} } */
 
 struct bar {int x;};
 extern struct bar foo(void);