From 12123452e45937b341f187716a2a8343f0908465 Mon Sep 17 00:00:00 2001
From: Jan Hubicka <jh@suse.cz>
Date: Thu, 1 Aug 2013 17:41:10 +0200
Subject: [PATCH] cgraph.h (release_function_body): Declare.

	* 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 |  6 ++++++
 gcc/cgraph.h  |  1 +
 gcc/tree.c    | 14 ++++++++++++++
 3 files changed, 21 insertions(+)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d60161e2f39b..bd846a00abad 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/cgraph.h b/gcc/cgraph.h
index 99acb62984c5..9b76b67d2f4d 100644
--- a/gcc/cgraph.h
+++ b/gcc/cgraph.h
@@ -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 *,
diff --git a/gcc/tree.c b/gcc/tree.c
index ab1173525c71..c9f47d26260d 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -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;
-- 
GitLab