aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDodji Seketeli <dodji@redhat.com>2010-01-18 19:11:24 +0000
committerDodji Seketeli <dodji@gcc.gnu.org>2010-01-18 20:11:24 +0100
commita5cf630e39611a1e7461aa0d17bed196f60bd710 (patch)
tree5679c87e4eb28cec5f1c93cb970dddeb574c4df9
parent3b9e834309be0cec32c5ec39c552a9bd39f533ee (diff)
downloadgcc-a5cf630e39611a1e7461aa0d17bed196f60bd710.zip
gcc-a5cf630e39611a1e7461aa0d17bed196f60bd710.tar.gz
gcc-a5cf630e39611a1e7461aa0d17bed196f60bd710.tar.bz2
re PR c++/42766 (tree check fail in build_expr_type_conversion)
Fix PR c++/42766 gcc/cp/ChangeLog: PR c++/42766 * cvt.c (build_expr_type_conversion): Look through OVERLOAD. gcc/testsuite/ChangeLog: PR c++/42766 * g++.dg/conversion/op6.C: New test. From-SVN: r156020
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/cvt.c1
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/conversion/op6.C18
4 files changed, 29 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index ffa7b86..ccb2afe 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2010-01-18 Dodji Seketeli <dodji@redhat.com>
+
+ PR c++/42766
+ * cvt.c (build_expr_type_conversion): Look through OVERLOAD.
+
2010-01-17 Dodji Seketeli <dodji@redhat.com>
PR c++/42697
diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c
index b4cc2b3..cbe8596 100644
--- a/gcc/cp/cvt.c
+++ b/gcc/cp/cvt.c
@@ -1203,6 +1203,7 @@ build_expr_type_conversion (int desires, tree expr, bool complain)
int win = 0;
tree candidate;
tree cand = TREE_VALUE (conv);
+ cand = OVL_CURRENT (cand);
if (winner && winner == cand)
continue;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 2b0d96d..11a7540 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2010-01-18 Dodji Seketeli <dodji@redhat.com>
+
+ PR c++/42766
+ * g++.dg/conversion/op6.C: New test.
+
2010-01-18 Uros Bizjak <ubizjak@gmail.com>
PR target/42774
diff --git a/gcc/testsuite/g++.dg/conversion/op6.C b/gcc/testsuite/g++.dg/conversion/op6.C
new file mode 100644
index 0000000..9aec9f0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/conversion/op6.C
@@ -0,0 +1,18 @@
+// Origin: PR c++/42766
+// { dg-do compile }
+
+template<class T> class smart_pointer {
+public:
+ operator T* () const { }
+ operator bool () const { }
+ operator bool () { }
+};
+class Context { };
+typedef smart_pointer<Context> ContextP;
+class SvnClient {
+ ~SvnClient();
+ ContextP svnContext;
+};
+SvnClient::~SvnClient() {
+ delete svnContext;
+}