From 37a80bf956c991916d5d43e23640efdea91c5cb9 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Fri, 15 Jul 2016 14:56:29 -0400 Subject: [PATCH] PR c++/71495 - spurious note during SFINAE. * call.c (convert_like_real): Mask complain. * semantics.c (perform_koenig_lookup): Likewise. From-SVN: r238397 --- gcc/cp/ChangeLog | 4 ++++ gcc/cp/call.c | 2 +- gcc/cp/semantics.c | 2 +- gcc/testsuite/g++.dg/cpp0x/sfinae57.C | 16 ++++++++++++++++ 4 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/sfinae57.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 0c38195..2dfc808 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2016-07-15 Jason Merrill + PR c++/71495 + * call.c (convert_like_real): Mask complain. + * semantics.c (perform_koenig_lookup): Likewise. + PR c++/71092 * constexpr.c (cxx_eval_call_expression): Fail quietly when cgraph threw away DECL_SAVED_TREE. diff --git a/gcc/cp/call.c b/gcc/cp/call.c index 6ae5df7..889852f 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -6640,7 +6640,7 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum, expr = decay_conversion (expr, complain); if (expr == error_mark_node) { - if (complain) + if (complain & tf_error) { maybe_print_user_conv_context (convs); if (fn) diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 615d3ae..19daeff 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -2245,7 +2245,7 @@ perform_koenig_lookup (cp_expr fn, vec *args, if (!fn) { /* The unqualified name could not be resolved. */ - if (complain) + if (complain & tf_error) fn = unqualified_fn_lookup_error (cp_expr (identifier, loc)); else fn = identifier; diff --git a/gcc/testsuite/g++.dg/cpp0x/sfinae57.C b/gcc/testsuite/g++.dg/cpp0x/sfinae57.C new file mode 100644 index 0000000..975a330 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/sfinae57.C @@ -0,0 +1,16 @@ +// PR c++/71495 +// { dg-do compile { target c++11 } } + +struct A; +template void f(T); // { dg-bogus "initializing" } +template T&& declval(); +struct B +{ + template static decltype(f(declval())) g(int); + template void g(...); +} b; + +int main() +{ + b.g(42); +} -- 2.7.4