cgraph.h (release_function_body): Declare.
authorJan Hubicka <jh@suse.cz>
Thu, 1 Aug 2013 15:41:10 +0000 (17:41 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Thu, 1 Aug 2013 15:41:10 +0000 (15:41 +0000)
* cgraph.h (release_function_body): Declare.
* tree.c (free_lang_data_in_decl): Free, parameters and return values
of unused delcarations.

From-SVN: r201413

gcc/ChangeLog
gcc/cgraph.h
gcc/tree.c

index d60161e..bd846a0 100644 (file)
@@ -1,3 +1,9 @@
+2013-08-01  Jan Hubicka  <jh@suse.cz>
+
+       * cgraph.h (release_function_body): Declare.
+       * tree.c (free_lang_data_in_decl): Free, parameters and return values
+       of unused delcarations.
+
 2013-08-01  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
        * config/arm/arm.md (minmax_arithsi_non_canon): Emit canonical RTL form
index 99acb62..9b76b67 100644 (file)
@@ -606,6 +606,7 @@ void debug_cgraph_node (struct cgraph_node *);
 void cgraph_remove_edge (struct cgraph_edge *);
 void cgraph_remove_node (struct cgraph_node *);
 void cgraph_release_function_body (struct cgraph_node *);
+void release_function_body (tree);
 void cgraph_node_remove_callees (struct cgraph_node *node);
 struct cgraph_edge *cgraph_create_edge (struct cgraph_node *,
                                        struct cgraph_node *,
index ab11735..c9f47d2 100644 (file)
@@ -4886,6 +4886,20 @@ free_lang_data_in_decl (tree decl)
 
  if (TREE_CODE (decl) == FUNCTION_DECL)
     {
+      struct cgraph_node *node;
+      if (!(node = cgraph_get_node (decl))
+         || (!node->symbol.definition && !node->clones))
+       {
+         if (node)
+           cgraph_release_function_body (node);
+         else
+           {
+             release_function_body (decl);
+             DECL_ARGUMENTS (decl) = NULL;
+             DECL_RESULT (decl) = NULL;
+             DECL_INITIAL (decl) = error_mark_node;
+           }
+       }
       if (gimple_has_body_p (decl))
        {
          tree t;