diff mbox

C++ PATCH for c++/71495 (bogus note in SFINAE)

Message ID CADzB+2m5q4zh8bwC6+r5pdGHJOM06Gkm_1HZsW42nCXwQDBtMg@mail.gmail.com
State New
Headers show

Commit Message

Jason Merrill July 15, 2016, 4:59 p.m. UTC
"complain" can be non-zero but not call for any diagnostics.

Tested x86_64-pc-linux-gnu, applying to trunk.
commit 63a7ba56bc105e90e64a8c273d0422d96752ad73
Author: Jason Merrill <jason@redhat.com>
Date:   Thu Jul 14 14:02:57 2016 -0400

    	PR c++/71495 - spurious note during SFINAE.
    
    	* call.c (convert_like_real): Mask complain.
diff mbox

Patch

diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index 9b02814..a3c5008 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -6634,7 +6634,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/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 <class T> void f(T);	// { dg-bogus "initializing" }
+template <class T> T&& declval();
+struct B
+{
+  template <class T, class U> static decltype(f<T>(declval<U>())) g(int);
+  template <class T, class U> void g(...);
+} b;
+
+int main()
+{
+  b.g<A,A>(42);
+}