summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4>2011-01-01 11:05:41 +0000
committerktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4>2011-01-01 11:05:41 +0000
commit99a71bbcb268ad8d60ecc5ec1a61b8f235e7fbec (patch)
tree965dc756aaa48aec86a2a583feae2d461252558b
parent477bad17fdea121bc41d44b3a7b97fe766a68337 (diff)
downloadppe42-gcc-99a71bbcb268ad8d60ecc5ec1a61b8f235e7fbec.tar.gz
ppe42-gcc-99a71bbcb268ad8d60ecc5ec1a61b8f235e7fbec.zip
ChangeLog gcc/
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
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/tree.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/eh/pr38662.C13
-rw-r--r--gcc/tree.c19
6 files changed, 42 insertions, 10 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index bec1b74f586..665be0b8f23 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 5f563157c3a..ae5b3f2223d 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -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
diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c
index ecb764adcc3..dcce44a439f 100644
--- a/gcc/cp/tree.c
+++ b/gcc/cp/tree.c
@@ -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);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 9a69ddd04d5..8c037b2231e 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 00000000000..5da0f9763ba
--- /dev/null
+++ b/gcc/testsuite/g++.dg/eh/pr38662.C
@@ -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);
+}
+
diff --git a/gcc/tree.c b/gcc/tree.c
index cc95d70bee0..be2cf98948e 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -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);
OpenPOWER on IntegriCloud