diff mbox

[C++] PR 51367

Message ID 4ED6B693.1040808@oracle.com
State New
Headers show

Commit Message

Paolo Carlini Nov. 30, 2011, 11:04 p.m. UTC
Hi,

for c++/51230 I tried to change unify_inconsistency to unconditionally 
use %qE but apparently that doesn't really work: quickly we end up 
duplicating the whole dump_type inside dump_expr, first POINTER_TYPE (as 
per this specific PR), and then REFERENCE_TYPE, and then OFFSET_TYPE, 
and then pointers to member functions are not handled correctly, etc. I 
guess, better just checking TYPE_P and be done with it.

Tested x86_64-linux. Ok?

Thanks,
Paolo.

////////////////////
/cp
2011-11-30  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/51367
	* pt.c (unify_inconsistency): Use either %qT or %qE depending on
	whether parm is a type or non-type parameter.

/cp
2011-11-30  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/51367
	* g++.dg/template/error47.C: New.

Comments

Jason Merrill Dec. 1, 2011, 3:57 a.m. UTC | #1
OK.

Jason
diff mbox

Patch

Index: testsuite/g++.dg/template/error47.C
===================================================================
--- testsuite/g++.dg/template/error47.C	(revision 0)
+++ testsuite/g++.dg/template/error47.C	(revision 0)
@@ -0,0 +1,9 @@ 
+// PR c++/51367
+
+template<typename T> void foo(T, T); // { dg-message "template" }
+
+void bar(void* p)
+{
+  foo(0, p); // { dg-error "no matching" }
+}
+// { dg-message "candidate|parameter 'T' ('int' and 'void*')" { target *-*-* } 7 }
Index: cp/pt.c
===================================================================
--- cp/pt.c	(revision 181858)
+++ cp/pt.c	(working copy)
@@ -5501,9 +5501,16 @@  static int
 unify_inconsistency (bool explain_p, tree parm, tree first, tree second)
 {
   if (explain_p)
-    inform (input_location,
-	    "  conflicting deductions for parameter %qE (%qE and %qE)",
-	    parm, first, second);
+    {
+      if (TYPE_P (parm))
+	inform (input_location,
+		"  deduced conflicting types for parameter %qT (%qT and %qT)",
+		parm, first, second);
+      else
+	inform (input_location,
+		"  deduced conflicting values for non-type parameter "
+		"%qE (%qE and %qE)", parm, first, second);
+    }
   return 1;
 }