aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree.c
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@ucw.cz>2015-11-24 21:26:48 +0100
committerJan Hubicka <hubicka@gcc.gnu.org>2015-11-24 20:26:48 +0000
commit0b87a9a2bd3835e62e690c8acd4bbb4b3bec27c7 (patch)
tree996665907662bd11e9174a1bb035070a2a4512d7 /gcc/tree.c
parentd74792629d41383f6ff4543aeed9bc6080d77809 (diff)
downloadgcc-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.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/gcc/tree.c b/gcc/tree.c
index 4176d61..f68a824 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -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. */