OSDN Git Service

PR middle-end/40080
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 9 May 2009 20:10:37 +0000 (20:10 +0000)
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 9 May 2009 20:10:37 +0000 (20:10 +0000)
* cgraphunit.c (cgraph_materialize_all_clones): Do not redirect
indirect calls; verify cgraph afterwards.

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

gcc/ChangeLog
gcc/cgraphunit.c

index 6de79af..73de4f3 100644 (file)
@@ -1,5 +1,11 @@
 2009-05-09  Jan Hubicka  <jh@suse.cz>
 
+       PR middle-end/40080
+       * cgraphunit.c (cgraph_materialize_all_clones): Do not redirect
+       indirect calls; verify cgraph afterwards.
+
+2009-05-09  Jan Hubicka  <jh@suse.cz>
+
        PR bootstrap/40082
        * ipa.c (update_inlined_to_pointer): New function.
        (cgraph_remove_unreachable_nodes): Use it.
index 9366ebe..e88d00d 100644 (file)
@@ -1762,7 +1762,12 @@ cgraph_materialize_all_clones (void)
        for (e = node->callees; e; e = e->next_callee)
          {
            tree decl = gimple_call_fndecl (e->call_stmt);
-           if (decl != e->callee->decl)
+           /* When function gets inlined, indirect inlining might've invented
+              new edge for orginally indirect stmt.  Since we are not
+              preserving clones in the original form, we must not update here
+              since other inline clones don't need to contain call to the same
+              call.  Inliner will do the substitution for us later.  */
+           if (decl && decl != e->callee->decl)
              {
                gimple new_stmt;
                gimple_stmt_iterator gsi;
@@ -1808,6 +1813,9 @@ cgraph_materialize_all_clones (void)
         verify_cgraph_node (node);
 #endif
       }
+#ifdef ENABLE_CHECKING
+  verify_cgraph ();
+#endif
   cgraph_remove_unreachable_nodes (false, cgraph_dump_file);
 }