cgraph.h (cgraph_mark_if_needed): New function.
authorJan Hubicka <jh@suse.cz>
Wed, 18 Jun 2008 13:42:36 +0000 (15:42 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Wed, 18 Jun 2008 13:42:36 +0000 (13:42 +0000)
* cgraph.h (cgraph_mark_if_needed): New function.
* cgraphunit.c (cgraph_mark_if_needed): New function.
* c-decl.c (duplicate_decl): Use it.

From-SVN: r136893

gcc/ChangeLog
gcc/c-decl.c
gcc/cgraph.h
gcc/cgraphunit.c

index 32fb7e8d3646cef893b946a4bc7bff91ddfbebd7..743b89b4a5527b422b41a260c5e6992630cc6440 100644 (file)
@@ -1,3 +1,9 @@
+2008-06-16  Jan Hubicka  <jh@suse.cz>
+
+       * cgraph.h (cgraph_mark_if_needed): New function.
+       * cgraphunit.c (cgraph_mark_if_needed): New function.
+       * c-decl.c (duplicate_decl): Use it.
+
 2008-06-16  Jan Hubicka  <jh@suse.cz>
 
        * cgraph.c (cgraph_add_new_function): When in expansion state, do
index 89fdf3d1b45cdaf342a161021db9132677af6e51..38c1581b3ff103f3abaacb47bf749ff7f6ea6965 100644 (file)
@@ -1913,9 +1913,9 @@ merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype)
   /* If we changed a function from DECL_EXTERNAL to !DECL_EXTERNAL,
      and the definition is coming from the old version, cgraph needs
      to be called again.  */
-  if (extern_changed && !new_is_definition 
+  if (extern_changed && !new_is_definition
       && TREE_CODE (olddecl) == FUNCTION_DECL && DECL_INITIAL (olddecl))
-    cgraph_finalize_function (olddecl, false);
+    cgraph_mark_if_needed (olddecl);
 }
 
 /* Handle when a new declaration NEWDECL has the same name as an old
index b537cb5785bd81853a879aa55e0c9e77bdcf35c8..dda2a1891f5421021be8a213e69e98854797bce8 100644 (file)
@@ -331,6 +331,7 @@ void cgraph_add_new_function (tree, bool);
 
 /* In cgraphunit.c  */
 void cgraph_finalize_function (tree, bool);
+void cgraph_mark_if_needed (tree);
 void cgraph_finalize_compilation_unit (void);
 void cgraph_optimize (void);
 void cgraph_mark_needed_node (struct cgraph_node *);
index 7c0db40ce7c428a61a8e078d189c3715e2f36b11..dec2213171277aadcdfa3d53c26b428fff40fc0b 100644 (file)
@@ -642,6 +642,18 @@ cgraph_finalize_function (tree decl, bool nested)
     do_warn_unused_parameter (decl);
 }
 
+/* C99 extern inline keywords allow changing of declaration after function
+   has been finalized.  We need to re-decide if we want to mark the function as
+   needed then.   */
+
+void
+cgraph_mark_if_needed (tree decl)
+{
+  struct cgraph_node *node = cgraph_node (decl);
+  if (node->local.finalized && decide_is_function_needed (node, decl))
+    cgraph_mark_needed_node (node);
+}
+
 /* Verify cgraph nodes of given cgraph node.  */
 void
 verify_cgraph_node (struct cgraph_node *node)