aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2002-04-03 18:43:35 -0500
committerJason Merrill <jason@gcc.gnu.org>2002-04-03 18:43:35 -0500
commitdffa4176aec81e6b81d355d99732be709d3bc8fe (patch)
tree69e4a662d2162898470b7ba451b541230b34c6a8 /gcc/cp
parent36c2272c905e791fa3241e7e26a02c2a322d95d7 (diff)
downloadgcc-dffa4176aec81e6b81d355d99732be709d3bc8fe.zip
gcc-dffa4176aec81e6b81d355d99732be709d3bc8fe.tar.gz
gcc-dffa4176aec81e6b81d355d99732be709d3bc8fe.tar.bz2
re PR c++/5104 (template using std::set_terminate fails due to throw() qualifier in <exception>)
PR c++/5104 * typeck.c (comptypes) [FUNCTION_TYPE]: Don't compare exception specifiers. [METHOD_TYPE]: Use same code as FUNCTION_TYPE. From-SVN: r51821
Diffstat (limited to 'gcc/cp')
-rw-r--r--gcc/cp/ChangeLog7
-rw-r--r--gcc/cp/typeck.c23
2 files changed, 10 insertions, 20 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 50dfde8..15e12d6 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,10 @@
+2002-04-04 Jason Merrill <jason@redhat.com>
+
+ PR c++/5104
+ * typeck.c (comptypes) [FUNCTION_TYPE]: Don't compare exception
+ specifiers.
+ [METHOD_TYPE]: Use same code as FUNCTION_TYPE.
+
2002-04-03 Richard Henderson <rth@redhat.com>
* cp-lang.c (cxx_warn_unused_global_decl): New.
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index d379809..7596d29 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -763,7 +763,7 @@ comp_except_types (a, b, exact)
}
/* Return 1 if TYPE1 and TYPE2 are equivalent exception specifiers.
- If EXACT is 0, T2 can be a subset of T1 (according to 15.4/7),
+ If EXACT is 0, T2 can be stricter than T1 (according to 15.4/7),
otherwise it must be exact. Exception lists are unordered, but
we've already filtered out duplicates. Most lists will be in order,
we should try to make use of that. */
@@ -786,7 +786,7 @@ comp_except_specs (t1, t2, exact)
return t2 != NULL_TREE && !TREE_VALUE (t2);
if (t2 == NULL_TREE) /* T2 is ... */
return 0;
- if (TREE_VALUE(t1) && !TREE_VALUE (t2)) /* T2 is EMPTY, T1 is not */
+ if (TREE_VALUE (t1) && !TREE_VALUE (t2)) /* T2 is EMPTY, T1 is not */
return !exact;
/* Neither set is ... or EMPTY, make sure each part of T2 is in T1.
@@ -987,20 +987,6 @@ comptypes (t1, t2, strict)
&& comptypes (TREE_TYPE (t1), TREE_TYPE (t2), strict));
break;
- case METHOD_TYPE:
- if (! comp_except_specs (TYPE_RAISES_EXCEPTIONS (t1),
- TYPE_RAISES_EXCEPTIONS (t2), 1))
- return 0;
-
- /* This case is anti-symmetrical!
- One can pass a base member (or member function)
- to something expecting a derived member (or member function),
- but not vice-versa! */
-
- val = (comptypes (TREE_TYPE (t1), TREE_TYPE (t2), strict)
- && compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2)));
- break;
-
case POINTER_TYPE:
case REFERENCE_TYPE:
t1 = TREE_TYPE (t1);
@@ -1015,11 +1001,8 @@ comptypes (t1, t2, strict)
goto look_hard;
break;
+ case METHOD_TYPE:
case FUNCTION_TYPE:
- if (! comp_except_specs (TYPE_RAISES_EXCEPTIONS (t1),
- TYPE_RAISES_EXCEPTIONS (t2), 1))
- return 0;
-
val = ((TREE_TYPE (t1) == TREE_TYPE (t2)
|| comptypes (TREE_TYPE (t1), TREE_TYPE (t2), strict))
&& compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2)));