summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2010-04-27 19:04:23 +0000
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>2010-04-27 19:04:23 +0000
commit8654352c6d3b03201d7166d925fa8310388596e1 (patch)
tree30ce0b6094830ba758b8da7099cd4fd8ec4ac0da
parent640a46a5c7038d1d97009cd1d4106ed24281985b (diff)
downloadppe42-gcc-8654352c6d3b03201d7166d925fa8310388596e1.tar.gz
ppe42-gcc-8654352c6d3b03201d7166d925fa8310388596e1.zip
PR c++/41468
* call.c (convert_like_real) [ck_ambig]: Just return error_mark_node if we don't want errors. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@158799 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/call.c2
-rw-r--r--gcc/testsuite/ChangeLog1
-rw-r--r--gcc/testsuite/g++.dg/template/sfinae18.C10
4 files changed, 17 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index d4b82a9a20a..f7456bf3d52 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,6 +1,10 @@
2010-04-27 Jason Merrill <jason@redhat.com>
PR c++/41468
+ * call.c (convert_like_real) [ck_ambig]: Just return error_mark_node
+ if we don't want errors.
+
+ PR c++/41468
* class.c (convert_to_base): Add complain parameter. Pass
ba_quiet to lookup_base if we don't want errors.
(build_vfield_ref): Pass complain to convert_to_base.
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index a97f7dcea10..7915417bd6e 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -4947,6 +4947,8 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum,
}
return expr;
case ck_ambig:
+ if (!(complain & tf_error))
+ return error_mark_node;
/* Call build_user_type_conversion again for the error. */
return build_user_type_conversion
(totype, convs->u.expr, LOOKUP_NORMAL);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ce7206a007c..c48c0fe8bbb 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -2,6 +2,7 @@
PR c++/41468
* g++.dg/template/sfinae17.C: New.
+ * g++.dg/template/sfinae18.C: New.
2010-04-27 Fabien ChĂȘne <fabien.chene@gmail.com>
diff --git a/gcc/testsuite/g++.dg/template/sfinae18.C b/gcc/testsuite/g++.dg/template/sfinae18.C
new file mode 100644
index 00000000000..bbc39cb3ac0
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/sfinae18.C
@@ -0,0 +1,10 @@
+// PR c++/41468
+
+typedef int Ft(int);
+struct A { operator Ft*(); };
+struct B { operator Ft*(); };
+struct C : A, B { };
+
+template<typename C> void f(int (*a)[sizeof(C()(0))]);
+template<typename C> void f(...);
+int main() { f<C>(0); }
OpenPOWER on IntegriCloud