diff options
| author | ktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-01-01 11:05:41 +0000 |
|---|---|---|
| committer | ktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-01-01 11:05:41 +0000 |
| commit | 99a71bbcb268ad8d60ecc5ec1a61b8f235e7fbec (patch) | |
| tree | 965dc756aaa48aec86a2a583feae2d461252558b | |
| parent | 477bad17fdea121bc41d44b3a7b97fe766a68337 (diff) | |
| download | ppe42-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/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/cp/tree.c | 3 | ||||
| -rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/testsuite/g++.dg/eh/pr38662.C | 13 | ||||
| -rw-r--r-- | gcc/tree.c | 19 |
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); |

