summaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authornathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>2001-06-05 12:53:52 +0000
committernathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>2001-06-05 12:53:52 +0000
commitc682aadfbdce0184e90aca968b87729cf26c38f7 (patch)
tree8f692d3a97ff18f16f19e7b81c5e5b61d15efcfe /gcc/cp
parent026b7f6ff094c0483286fe2fd8f79bd5d4c884ae (diff)
downloadgcc-c682aadfbdce0184e90aca968b87729cf26c38f7.tar.gz
cp:
* call.c (build_user_type_conversion_1): Set ICS_USER_FLAG and ICS_BAD_FLAG on created conversion. (compare_ics): Break out rank. testsuite: * g++.old-deja/g++.other/conv7.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@42907 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cp')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/call.c16
2 files changed, 17 insertions, 5 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 970f787b101..f4e08d603f3 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,11 @@
2001-06-05 Nathan Sidwell <nathan@codesourcery.com>
+ * call.c (build_user_type_conversion_1): Set ICS_USER_FLAG and
+ ICS_BAD_FLAG on created conversion.
+ (compare_ics): Break out rank.
+
+2001-06-05 Nathan Sidwell <nathan@codesourcery.com>
+
* decl.c (xref_tag): Remove extraneous %s on dependent name
lookup warning.
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index 5367cc55805..f2478ed5e6e 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -2521,9 +2521,10 @@ build_user_type_conversion_1 (totype, expr, flags)
(DECL_CONSTRUCTOR_P (cand->fn)
? totype : non_reference (TREE_TYPE (TREE_TYPE (cand->fn)))),
expr, build_ptr_wrapper (cand));
- ICS_USER_FLAG (cand->second_conv) = 1;
+
+ ICS_USER_FLAG (cand->second_conv) = ICS_USER_FLAG (*p) = 1;
if (cand->viable == -1)
- ICS_BAD_FLAG (cand->second_conv) = 1;
+ ICS_BAD_FLAG (cand->second_conv) = ICS_BAD_FLAG (*p) = 1;
return cand;
}
@@ -4799,6 +4800,7 @@ compare_ics (ics1, ics2)
tree deref_from_type2 = NULL_TREE;
tree deref_to_type1 = NULL_TREE;
tree deref_to_type2 = NULL_TREE;
+ int rank1, rank2;
/* REF_BINDING is non-zero if the result of the conversion sequence
is a reference type. In that case TARGET_TYPE is the
@@ -4828,13 +4830,17 @@ compare_ics (ics1, ics2)
--a user-defined conversion sequence (_over.ics.user_) is a
better conversion sequence than an ellipsis conversion sequence
(_over.ics.ellipsis_). */
- if (ICS_RANK (ics1) > ICS_RANK (ics2))
+ rank1 = ICS_RANK (ics1);
+ rank2 = ICS_RANK (ics2);
+
+ if (rank1 > rank2)
return -1;
- else if (ICS_RANK (ics1) < ICS_RANK (ics2))
+ else if (rank1 < rank2)
return 1;
- if (ICS_RANK (ics1) == BAD_RANK)
+ if (rank1 == BAD_RANK)
{
+ /* XXX Isn't this an extension? */
/* Both ICS are bad. We try to make a decision based on what
would have happenned if they'd been good. */
if (ICS_USER_FLAG (ics1) > ICS_USER_FLAG (ics2)