From cf2feafa7e367cf1f115abe0099d5fde94d52b8b Mon Sep 17 00:00:00 2001 From: Erick Ochoa Date: Wed, 29 Apr 2020 11:59:14 +0200 Subject: Fixes csmith test #4 --- gcc/ipa-str-reorg-dead-field-eliminate.c | 13 +++++++++++++ gcc/testsuite/gcc.dg/ipa/ipa-structreorg-55-csmith-4.c | 10 ++++++++++ 2 files changed, 23 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/ipa/ipa-structreorg-55-csmith-4.c diff --git a/gcc/ipa-str-reorg-dead-field-eliminate.c b/gcc/ipa-str-reorg-dead-field-eliminate.c index a99f9f4ddf0..0d6b5df18d8 100644 --- a/gcc/ipa-str-reorg-dead-field-eliminate.c +++ b/gcc/ipa-str-reorg-dead-field-eliminate.c @@ -1508,7 +1508,20 @@ rewrite_component_ref_def_lhs (gimple_stmt_iterator &gsi, tree expr, t_map &type tree _struct = TREE_OPERAND (expr, 0); 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); delete_info = delete_info ? delete_info : type_map.get (TYPE_MAIN_VARIANT(_struct_type)); const_tree *new_struct_type_ptr = delete_info ? &(delete_info->new_record) : NULL; diff --git a/gcc/testsuite/gcc.dg/ipa/ipa-structreorg-55-csmith-4.c b/gcc/testsuite/gcc.dg/ipa/ipa-structreorg-55-csmith-4.c new file mode 100644 index 00000000000..e745c6aa8fb --- /dev/null +++ b/gcc/testsuite/gcc.dg/ipa/ipa-structreorg-55-csmith-4.c @@ -0,0 +1,10 @@ +/* { dg-do run } */ +/* { dg-options "-w -flto -flto-partition=none -fipa-dead-field-eliminate" } */ + +#include +union a { + int8_t b +} c() { + union a d = {4073709551608}; +} +main() {} -- cgit v1.2.3