OSDN Git Service

* call.c (joust): Fix handling of overloaded builtin operators.
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 30 May 2000 17:39:59 +0000 (17:39 +0000)
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 30 May 2000 17:39:59 +0000 (17:39 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@34269 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/call.c
gcc/testsuite/g++.old-deja/g++.other/overload13.C [new file with mode: 0644]

index e7f8552..e6cdcd2 100644 (file)
@@ -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.
index 2bd5c81..acb5cfe 100644 (file)
@@ -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 (file)
index 0000000..d6728c7
--- /dev/null
@@ -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;
+}