aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/call.c2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.other/overload13.C13
3 files changed, 18 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index e7f8552..e6cdcd2 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,7 @@
+2000-05-30 Mark Mitchell <mark@codesourcery.com>
+
+ * call.c (joust): Fix handling of overloaded builtin operators.
+
2000-05-30 Zack Weinberg <zack@wolery.cumb.org>
* cp-tree.h (DECL_ANTICIPATED): New macro.
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index 2bd5c81..acb5cfe 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -5128,7 +5128,7 @@ joust (cand1, cand2, warn)
/* Kludge around broken overloading rules whereby
Integer a, b; test ? a : b; is ambiguous, since there's a builtin
that takes references and another that takes values. */
- if (DECL_OVERLOADED_OPERATOR_P (cand1->fn) == COND_EXPR)
+ if (cand1->fn == ansi_opname (COND_EXPR))
{
tree c1 = TREE_VEC_ELT (cand1->convs, 1);
tree c2 = TREE_VEC_ELT (cand2->convs, 1);
diff --git a/gcc/testsuite/g++.old-deja/g++.other/overload13.C b/gcc/testsuite/g++.old-deja/g++.other/overload13.C
new file mode 100644
index 0000000..d6728c7
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.other/overload13.C
@@ -0,0 +1,13 @@
+// Build don't link:
+// Origin: Nathan Sidwell <nathan@codesourcery.com>
+
+struct A {
+ bool operator== (A const &);
+ operator bool () const;
+ operator int * () const;
+};
+
+bool foo (A &a1, A &a2)
+{
+ return a1 == a2;
+}