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