OSDN Git Service

ChangeLog gcc/
authorktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 1 Jan 2011 11:05:41 +0000 (11:05 +0000)
committerktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 1 Jan 2011 11:05:41 +0000 (11:05 +0000)
2011-01-01  Kai Tietz  <kai.tietz@onevision.com>

PR target/38662
* tree.c (type_hash_eq): Call
language hook for METHOD_TYPEs, too.

ChangeLog gcc/cp

2011-01-01  Kai Tietz  <kai.tietz@onevision.com>

PR target/38662
* tree.c (cxx_type_hash_eq):
Allow METHOD_TYPE, too.

ChangeLog gcc/testsuite

2011-01-01  Kai Tietz  <kai.tietz@onevision.com>

PR target/38662
* g++.dg/eh/pr38662.C: New testcase.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@168389 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/cp/ChangeLog
gcc/cp/tree.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/eh/pr38662.C [new file with mode: 0644]
gcc/tree.c

index bec1b74..665be0b 100644 (file)
@@ -1,3 +1,9 @@
+2011-01-01  Kai Tietz  <kai.tietz@onevision.com>
+
+       PR target/38662
+       * tree.c (type_hash_eq): Call
+       language hook for METHOD_TYPEs, too.
+
 2010-12-31  Gerald Pfeifer  <gerald@pfeifer.com>
 
        * doc/install.texi (powerpc-*-darwin*): Update reference to
index 5f56315..ae5b3f2 100644 (file)
@@ -1,3 +1,9 @@
+2011-01-01  Kai Tietz  <kai.tietz@onevision.com>
+
+       PR target/38662
+       * tree.c (cxx_type_hash_eq):
+       Allow METHOD_TYPE, too.
+
 2010-12-28  Jason Merrill  <jason@redhat.com>
 
        PR c++/47068
index ecb764a..dcce44a 100644 (file)
@@ -2749,7 +2749,8 @@ cp_build_type_attribute_variant (tree type, tree attributes)
 bool
 cxx_type_hash_eq (const_tree typea, const_tree typeb)
 {
-  gcc_assert (TREE_CODE (typea) == FUNCTION_TYPE);
+  gcc_assert (TREE_CODE (typea) == FUNCTION_TYPE
+             || TREE_CODE (typea) == METHOD_TYPE);
 
   return comp_except_specs (TYPE_RAISES_EXCEPTIONS (typea),
                            TYPE_RAISES_EXCEPTIONS (typeb), ce_exact);
index 9a69ddd..8c037b2 100644 (file)
@@ -1,3 +1,8 @@
+2011-01-01  Kai Tietz  <kai.tietz@onevision.com>
+
+       PR target/38662
+       * g++.dg/eh/pr38662.C: New testcase.
+
 2011-01-01  Chung-Lin Tang  <cltang@codesourcery.com>
 
        * gcc.target/arm/vfp-1.c (test_ldst): Fixed fsts test to
diff --git a/gcc/testsuite/g++.dg/eh/pr38662.C b/gcc/testsuite/g++.dg/eh/pr38662.C
new file mode 100644 (file)
index 0000000..5da0f97
--- /dev/null
@@ -0,0 +1,13 @@
+// { dg-do compile { target { { i?86-*-* x86_64-*-* } && ilp32 } } }
+class E { };
+
+class T {
+  int foo(bool a) throw (E) __attribute__((regparm(1)));
+  int bar(bool b) __attribute__((regparm(1)));
+};
+
+int T::bar(bool b)
+{
+  return (b ? 1 : 2);
+}
+
index cc95d70..be2cf98 100644 (file)
@@ -6007,15 +6007,16 @@ type_hash_eq (const void *va, const void *vb)
       return TYPE_OFFSET_BASETYPE (a->type) == TYPE_OFFSET_BASETYPE (b->type);
 
     case METHOD_TYPE:
-      return (TYPE_METHOD_BASETYPE (a->type) == TYPE_METHOD_BASETYPE (b->type)
-             && (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
-                 || (TYPE_ARG_TYPES (a->type)
-                     && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
-                     && TYPE_ARG_TYPES (b->type)
-                     && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
-                     && type_list_equal (TYPE_ARG_TYPES (a->type),
-                                         TYPE_ARG_TYPES (b->type)))));
-
+      if (TYPE_METHOD_BASETYPE (a->type) == TYPE_METHOD_BASETYPE (b->type)
+         && (TYPE_ARG_TYPES (a->type) == TYPE_ARG_TYPES (b->type)
+             || (TYPE_ARG_TYPES (a->type)
+                 && TREE_CODE (TYPE_ARG_TYPES (a->type)) == TREE_LIST
+                 && TYPE_ARG_TYPES (b->type)
+                 && TREE_CODE (TYPE_ARG_TYPES (b->type)) == TREE_LIST
+                 && type_list_equal (TYPE_ARG_TYPES (a->type),
+                                     TYPE_ARG_TYPES (b->type)))))
+        break;
+      return 0;
     case ARRAY_TYPE:
       return TYPE_DOMAIN (a->type) == TYPE_DOMAIN (b->type);