Bill,
can you give this patch a spin please? I've smoke tested it on a ppc64le x-compiler, but don't have one to run executables. regression testing on an x86_64-linux system is ok.

The DEPENDENT_TYPE_VALID_P thing is a red herring.

It is the canonical type table's equal function considering most types with different TYPE_NAMEs to be different. Now, you might think that only applies to things like RECORD_TYPE, but no, wchar_t is different from plain int, for example.

However, as you can see there's already a get-out for COMPLEX_TYPE, and I think the same is needed for VECTOR_TYPE.

Both set_underlying_type and rs6000 set the builtin vector type's TYPE_NAME, and so one constructed via applying __attribute__((vector_size(16))) will never match. And it should.

nathan
--
Nathan Sidwell

Index: tree.c
===================================================================
--- tree.c	(revision 246647)
+++ tree.c	(working copy)
@@ -7005,10 +7005,11 @@ type_cache_hasher::equal (type_hash *a,
   if (a->hash != b->hash
       || TREE_CODE (a->type) != TREE_CODE (b->type)
       || TREE_TYPE (a->type) != TREE_TYPE (b->type)
-      || !attribute_list_equal (TYPE_ATTRIBUTES (a->type),
-				 TYPE_ATTRIBUTES (b->type))
       || (TREE_CODE (a->type) != COMPLEX_TYPE
-          && TYPE_NAME (a->type) != TYPE_NAME (b->type)))
+	  && TREE_CODE (a->type) != VECTOR_TYPE
+          && TYPE_NAME (a->type) != TYPE_NAME (b->type))
+      || !attribute_list_equal (TYPE_ATTRIBUTES (a->type),
+				TYPE_ATTRIBUTES (b->type)))
     return 0;
 
   /* Be careful about comparing arrays before and after the element type

Reply via email to