diff options
author | Jan Hubicka <hubicka@ucw.cz> | 2015-11-24 21:26:48 +0100 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2015-11-24 20:26:48 +0000 |
commit | 0b87a9a2bd3835e62e690c8acd4bbb4b3bec27c7 (patch) | |
tree | 996665907662bd11e9174a1bb035070a2a4512d7 /gcc/tree.c | |
parent | d74792629d41383f6ff4543aeed9bc6080d77809 (diff) | |
download | gcc-0b87a9a2bd3835e62e690c8acd4bbb4b3bec27c7.zip gcc-0b87a9a2bd3835e62e690c8acd4bbb4b3bec27c7.tar.gz gcc-0b87a9a2bd3835e62e690c8acd4bbb4b3bec27c7.tar.bz2 |
tree.c (make_vector_type): Properly compute canonical type of the main variant.
* tree.c (make_vector_type): Properly compute canonical type of the
main variant.
(verify_type): Verify that TYPE_CANONICAL of TYPE_MAIN_VARIANT is
a main variant.
From-SVN: r230837
Diffstat (limited to 'gcc/tree.c')
-rw-r--r-- | gcc/tree.c | 16 |
1 files changed, 12 insertions, 4 deletions
@@ -9860,19 +9860,20 @@ make_vector_type (tree innertype, int nunits, machine_mode mode) { tree t; inchash::hash hstate; + tree mv_innertype = TYPE_MAIN_VARIANT (innertype); t = make_node (VECTOR_TYPE); - TREE_TYPE (t) = TYPE_MAIN_VARIANT (innertype); + TREE_TYPE (t) = mv_innertype; SET_TYPE_VECTOR_SUBPARTS (t, nunits); SET_TYPE_MODE (t, mode); - if (TYPE_STRUCTURAL_EQUALITY_P (innertype) || in_lto_p) + if (TYPE_STRUCTURAL_EQUALITY_P (mv_innertype) || in_lto_p) SET_TYPE_STRUCTURAL_EQUALITY (t); - else if ((TYPE_CANONICAL (innertype) != innertype + else if ((TYPE_CANONICAL (mv_innertype) != innertype || mode != VOIDmode) && !VECTOR_BOOLEAN_TYPE_P (t)) TYPE_CANONICAL (t) - = make_vector_type (TYPE_CANONICAL (innertype), nunits, VOIDmode); + = make_vector_type (TYPE_CANONICAL (mv_innertype), nunits, VOIDmode); layout_type (t); @@ -13540,6 +13541,13 @@ verify_type (const_tree t) debug_tree (ct); error_found = true; } + if (TYPE_MAIN_VARIANT (t) == t && ct && TYPE_MAIN_VARIANT (ct) != ct) + { + error ("TYPE_CANONICAL of main variant is not main variant"); + debug_tree (ct); + debug_tree (TYPE_MAIN_VARIANT (ct)); + error_found = true; + } /* Check various uses of TYPE_MINVAL. */ |