re PR c++/36852 (Two dimensional array in template method argument list incorrectly...
authorJakub Jelinek <jakub@redhat.com>
Tue, 29 Jul 2008 16:29:33 +0000 (18:29 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 29 Jul 2008 16:29:33 +0000 (18:29 +0200)
PR c++/36852
* tree.c (cplus_array_hash, build_cplus_array_type_1): Hash on
TYPE_UID instead of pointers.

* g++.dg/pch/array-1.C: New test.
* g++.dg/pch/array-1.Hs: New file.

From-SVN: r138250

gcc/cp/ChangeLog
gcc/cp/tree.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/pch/array-1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/pch/array-1.Hs [new file with mode: 0644]

index 6fe401a759bdc751351ce470d6a20bfe872c94cc..e05b0cb8d9413f1448abac1f77b6b744e4eb3c19 100644 (file)
@@ -1,3 +1,9 @@
+2008-07-29  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/36852
+       * tree.c (cplus_array_hash, build_cplus_array_type_1): Hash on
+       TYPE_UID instead of pointers.
+
 2008-07-29  Jan Hubicka  <jh@suse.cz>
 
        * optimize.c (maybe_clone_body): Remove DECL_INLINE.
index 0522ae2786f17a7e6ee594a9f81a0513ba2252ad..50c3049c3d07271907406161ef1106aece2e0ac7 100644 (file)
@@ -504,9 +504,9 @@ cplus_array_hash (const void* k)
   hashval_t hash;
   const_tree const t = (const_tree) k;
 
-  hash = (htab_hash_pointer (TREE_TYPE (t))
-         ^ htab_hash_pointer (TYPE_DOMAIN (t)));
-
+  hash = TYPE_UID (TREE_TYPE (t));
+  if (TYPE_DOMAIN (t))
+    hash ^= TYPE_UID (TYPE_DOMAIN (t));
   return hash;
 }
 
@@ -553,8 +553,9 @@ build_cplus_array_type_1 (tree elt_type, tree index_type)
        cplus_array_htab = htab_create_ggc (61, &cplus_array_hash,
                                            &cplus_array_compare, NULL);
       
-      hash = (htab_hash_pointer (elt_type)
-             ^ htab_hash_pointer (index_type));
+      hash = TYPE_UID (elt_type);
+      if (index_type)
+       hash ^= TYPE_UID (index_type);
       cai.type = elt_type;
       cai.domain = index_type;
 
index cba3ac04df1ba8c5d8ca07cd578366537ec1c20f..d4e8ddb8701b01117108660feda8b16d5f71f8d0 100644 (file)
@@ -1,3 +1,9 @@
+2008-07-29  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/36852
+       * g++.dg/pch/array-1.C: New test.
+       * g++.dg/pch/array-1.Hs: New file.
+
 2008-07-29  Jan Hubicka  <jh@suse.cz>
 
        * gcc.dg/20040206-1.c: Expect frontend warning now.
diff --git a/gcc/testsuite/g++.dg/pch/array-1.C b/gcc/testsuite/g++.dg/pch/array-1.C
new file mode 100644 (file)
index 0000000..a8935ed
--- /dev/null
@@ -0,0 +1,15 @@
+// PR c++/36852
+
+#include "array-1.H"
+
+template <class T>
+T
+A::foo (T t[3][3])
+{
+  return t[0][1];
+}
+
+int
+main ()
+{
+}
diff --git a/gcc/testsuite/g++.dg/pch/array-1.Hs b/gcc/testsuite/g++.dg/pch/array-1.Hs
new file mode 100644 (file)
index 0000000..fb44b67
--- /dev/null
@@ -0,0 +1,4 @@
+struct A
+{
+  template <class T> static T foo (T[3][3]);
+};