diff options
author | Jason Merrill <jason@redhat.com> | 2010-04-27 15:04:23 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2010-04-27 15:04:23 -0400 |
commit | 4a5d353fa8b904fb64df60f68d7c7a542dd20aa6 (patch) | |
tree | 30ce0b6094830ba758b8da7099cd4fd8ec4ac0da /gcc | |
parent | 798ec80703636f8572e33e10dbeb86f497490fbf (diff) | |
download | gcc-4a5d353fa8b904fb64df60f68d7c7a542dd20aa6.zip gcc-4a5d353fa8b904fb64df60f68d7c7a542dd20aa6.tar.gz gcc-4a5d353fa8b904fb64df60f68d7c7a542dd20aa6.tar.bz2 |
re PR c++/41468 (SFINAE for expressions doesn't consider ambiguous conversion sequences)
PR c++/41468
* call.c (convert_like_real) [ck_ambig]: Just return error_mark_node
if we don't want errors.
From-SVN: r158799
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/call.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 1 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/sfinae18.C | 10 |
4 files changed, 17 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index d4b82a9..f7456bf 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 a97f7dc..7915417 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 ce7206a..c48c0fe 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 0000000..bbc39cb --- /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); } |