diff options
Diffstat (limited to 'gcc/ipa-str-reorg-dead-field-eliminate.c')
-rw-r--r-- | gcc/ipa-str-reorg-dead-field-eliminate.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/gcc/ipa-str-reorg-dead-field-eliminate.c b/gcc/ipa-str-reorg-dead-field-eliminate.c index f2e3ccedbb1..9a77b7a6553 100644 --- a/gcc/ipa-str-reorg-dead-field-eliminate.c +++ b/gcc/ipa-str-reorg-dead-field-eliminate.c @@ -1530,6 +1530,7 @@ rewrite_component_ref_def (tree expr, gcc_assert (expr); tree expr_type = TREE_TYPE (expr); gcc_assert (expr_type); + delete_info_t *delete_info1 = type_map.get (expr_type); const_tree *new_expr_type_ptr = delete_info1 ? &(delete_info1->new_record) : NULL; if (new_expr_type_ptr) @@ -1539,6 +1540,16 @@ rewrite_component_ref_def (tree expr, gcc_assert (_struct); tree _struct_type = TREE_TYPE (_struct); gcc_assert (_struct_type); + const enum tree_code code = TREE_CODE(_struct_type); + const bool is_record = RECORD_TYPE == code; + //TODO: Handle unions better + switch (code) + { + case UNION_TYPE: return false; break; + case RECORD_TYPE: break; + default: gcc_unreachable(); break; + } + gcc_assert(is_record); delete_info_t *delete_info = type_map.get (_struct_type); const_tree *new_struct_type_ptr = delete_info ? &(delete_info->new_record) : NULL; |