This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug middle-end/40080] [4.5 Regression] error: missing callgraph edge for call stmt



------- Comment #3 from hubicka at ucw dot cz  2009-05-09 18:52 -------
Subject: Re:  [4.5 Regression] error: missing callgraph edge for call stmt

Hi,
I am testing the following:

Index: cgraphunit.c
===================================================================
--- cgraphunit.c        (revision 147319)
+++ cgraphunit.c        (working copy)
@@ -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);
 }



-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40080


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]