diff options
author | Richard Guenther <rguenther@suse.de> | 2009-09-09 09:30:26 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2009-09-09 09:30:26 +0000 |
commit | ccffb7554eb3c2ab5760c2d817c2ff4e8aae09bc (patch) | |
tree | 04799c8a0b105d294ad0d8399468daab5893b09a /gcc/tree.c | |
parent | e79faf7e4465a87a20f7654ce1b5f442e576371a (diff) | |
download | gcc-ccffb7554eb3c2ab5760c2d817c2ff4e8aae09bc.zip gcc-ccffb7554eb3c2ab5760c2d817c2ff4e8aae09bc.tar.gz gcc-ccffb7554eb3c2ab5760c2d817c2ff4e8aae09bc.tar.bz2 |
tree.c (free_lang_data_in_type): Do not free the type variant chains.
2009-09-09 Richard Guenther <rguenther@suse.de>
* tree.c (free_lang_data_in_type): Do not free the type variant
chains.
(free_lang_data): Merge char_type_node with its properly signed
variant.
(pass_ipa_free): Collect after freeing language specific data.
From-SVN: r151558
Diffstat (limited to 'gcc/tree.c')
-rw-r--r-- | gcc/tree.c | 18 |
1 files changed, 7 insertions, 11 deletions
@@ -4238,16 +4238,6 @@ free_lang_data_in_type (tree type) TYPE_CONTEXT (type) = NULL_TREE; TYPE_STUB_DECL (type) = NULL_TREE; - - /* Remove type variants other than the main variant. This is both - wasteful and it may introduce infinite loops when the types are - read from disk and merged (since the variant will be the same - type as the main variant, traversing type variants will get into - an infinite loop). */ - if (TYPE_MAIN_VARIANT (type)) - TYPE_NEXT_VARIANT (TYPE_MAIN_VARIANT (type)) = NULL_TREE; - - TYPE_NEXT_VARIANT (type) = NULL_TREE; } @@ -4856,6 +4846,12 @@ free_lang_data (void) boolean_true_node = TYPE_MAX_VALUE (boolean_type_node); } + /* Unify char_type_node with its properly signed variant. */ + if (TYPE_UNSIGNED (char_type_node)) + unsigned_char_type_node = char_type_node; + else + signed_char_type_node = char_type_node; + /* Reset some langhooks. */ lang_hooks.callgraph.analyze_expr = NULL; lang_hooks.types_compatible_p = NULL; @@ -4898,7 +4894,7 @@ struct simple_ipa_opt_pass pass_ipa_free_lang_data = 0, /* properties_provided */ 0, /* properties_destroyed */ 0, /* todo_flags_start */ - 0 /* todo_flags_finish */ + TODO_ggc_collect /* todo_flags_finish */ } }; |