Commit b8e99d03 by Jan Hubicka Committed by Jan Hubicka

tree.c (free_lang_data_in_type, [...]): Also free unnecesary type decls.

	* tree.c (free_lang_data_in_type, find_decls_types_r): Also free
	unnecesary type decls.
	* tree.h (is_redundant_typedef): Declare.
	* dwarf2out.c (is_redundant_typedef): Export; booleanize

From-SVN: r231588
parent 425112c8
2015-12-10 Jan Hubicka <hubicka@ucw.cz>
* tree.c (free_lang_data_in_type, find_decls_types_r): Also free
unnecesary type decls.
* tree.h (is_redundant_typedef): Declare.
* dwarf2out.c (is_redundant_typedef): Export; booleanize
2015-12-12 Eric Botcazou <ebotcazou@adacore.com> 2015-12-12 Eric Botcazou <ebotcazou@adacore.com>
* config/sparc/sparc.h (TARGET_SUPPORTS_WIDE_INT): Define to 1. * config/sparc/sparc.h (TARGET_SUPPORTS_WIDE_INT): Define to 1.
...@@ -3319,7 +3319,6 @@ static void gen_typedef_die (tree, dw_die_ref); ...@@ -3319,7 +3319,6 @@ static void gen_typedef_die (tree, dw_die_ref);
static void gen_type_die (tree, dw_die_ref); static void gen_type_die (tree, dw_die_ref);
static void gen_block_die (tree, dw_die_ref); static void gen_block_die (tree, dw_die_ref);
static void decls_for_scope (tree, dw_die_ref); static void decls_for_scope (tree, dw_die_ref);
static inline int is_redundant_typedef (const_tree);
static bool is_naming_typedef_decl (const_tree); static bool is_naming_typedef_decl (const_tree);
static inline dw_die_ref get_context_die (tree); static inline dw_die_ref get_context_die (tree);
static void gen_namespace_die (tree, dw_die_ref); static void gen_namespace_die (tree, dw_die_ref);
...@@ -21117,11 +21116,11 @@ decls_for_scope (tree stmt, dw_die_ref context_die) ...@@ -21117,11 +21116,11 @@ decls_for_scope (tree stmt, dw_die_ref context_die)
/* Is this a typedef we can avoid emitting? */ /* Is this a typedef we can avoid emitting? */
static inline int bool
is_redundant_typedef (const_tree decl) is_redundant_typedef (const_tree decl)
{ {
if (TYPE_DECL_IS_STUB (decl)) if (TYPE_DECL_IS_STUB (decl))
return 1; return true;
if (DECL_ARTIFICIAL (decl) if (DECL_ARTIFICIAL (decl)
&& DECL_CONTEXT (decl) && DECL_CONTEXT (decl)
...@@ -21129,9 +21128,9 @@ is_redundant_typedef (const_tree decl) ...@@ -21129,9 +21128,9 @@ is_redundant_typedef (const_tree decl)
&& TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL && TREE_CODE (TYPE_NAME (DECL_CONTEXT (decl))) == TYPE_DECL
&& DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl)))) && DECL_NAME (decl) == DECL_NAME (TYPE_NAME (DECL_CONTEXT (decl))))
/* Also ignore the artificial member typedef for the class name. */ /* Also ignore the artificial member typedef for the class name. */
return 1; return true;
return 0; return false;
} }
/* Return TRUE if TYPE is a typedef that names a type for linkage /* Return TRUE if TYPE is a typedef that names a type for linkage
......
...@@ -5191,7 +5191,10 @@ free_lang_data_in_type (tree type) ...@@ -5191,7 +5191,10 @@ free_lang_data_in_type (tree type)
while (member) while (member)
{ {
if (TREE_CODE (member) == FIELD_DECL if (TREE_CODE (member) == FIELD_DECL
|| TREE_CODE (member) == TYPE_DECL) || (TREE_CODE (member) == TYPE_DECL
&& !DECL_IGNORED_P (member)
&& debug_info_level > DINFO_LEVEL_TERSE
&& !is_redundant_typedef (member)))
{ {
if (prev) if (prev)
TREE_CHAIN (prev) = member; TREE_CHAIN (prev) = member;
...@@ -5216,7 +5219,7 @@ free_lang_data_in_type (tree type) ...@@ -5216,7 +5219,7 @@ free_lang_data_in_type (tree type)
/* Remove TYPE_METHODS list. While it would be nice to keep it /* Remove TYPE_METHODS list. While it would be nice to keep it
to enable ODR warnings about different method lists, doing so to enable ODR warnings about different method lists, doing so
seems to impractically increase size of LTO data streamed. seems to impractically increase size of LTO data streamed.
Keep the infrmation if TYPE_METHODS was non-NULL. This is used Keep the information if TYPE_METHODS was non-NULL. This is used
by function.c and pretty printers. */ by function.c and pretty printers. */
if (TYPE_METHODS (type)) if (TYPE_METHODS (type))
TYPE_METHODS (type) = error_mark_node; TYPE_METHODS (type) = error_mark_node;
...@@ -5666,7 +5669,10 @@ find_decls_types_r (tree *tp, int *ws, void *data) ...@@ -5666,7 +5669,10 @@ find_decls_types_r (tree *tp, int *ws, void *data)
while (tem) while (tem)
{ {
if (TREE_CODE (tem) == FIELD_DECL if (TREE_CODE (tem) == FIELD_DECL
|| TREE_CODE (tem) == TYPE_DECL) || (TREE_CODE (tem) == TYPE_DECL
&& !DECL_IGNORED_P (tem)
&& debug_info_level > DINFO_LEVEL_TERSE
&& !is_redundant_typedef (tem)))
fld_worklist_push (tem, fld); fld_worklist_push (tem, fld);
tem = TREE_CHAIN (tem); tem = TREE_CHAIN (tem);
} }
......
...@@ -5386,6 +5386,7 @@ extern void gt_pch_nx (tree &); ...@@ -5386,6 +5386,7 @@ extern void gt_pch_nx (tree &);
extern void gt_pch_nx (tree &, gt_pointer_operator, void *); extern void gt_pch_nx (tree &, gt_pointer_operator, void *);
extern bool nonnull_arg_p (const_tree); extern bool nonnull_arg_p (const_tree);
extern bool is_redundant_typedef (const_tree);
extern location_t extern location_t
set_source_range (tree expr, location_t start, location_t finish); set_source_range (tree expr, location_t start, location_t finish);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment