public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc(refs/users/meissner/heads/ieee)] c++: Respect current_constraint_diagnosis_depth in diagnose_compound_requirement
@ 2020-04-16 22:43 Michael Meissner
  0 siblings, 0 replies; only message in thread
From: Michael Meissner @ 2020-04-16 22:43 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:cd68edf894d6b72e5bc37ac205deef9d237ab70b

commit cd68edf894d6b72e5bc37ac205deef9d237ab70b
Author: Patrick Palka <ppalka@redhat.com>
Date:   Sat Mar 28 08:56:33 2020 -0400

    c++: Respect current_constraint_diagnosis_depth in diagnose_compound_requirement
    
    The previous patch tries to avoid changing our current default diagnostics.  But
    for the sake of consistency we arguably should also respect
    current_constraint_diagnosis_depth in diagnose_compound_requirement() like we do
    in the other error-replaying diagnostic routines.  But doing so would be a
    change to our default diagnostics behavior, so the change has been split out
    into this separate patch for separate consideration.
    
    gcc/cp/ChangeLog:
    
            * constraint.cc (diagnose_compound_requirement): When diagnosing a
            compound requirement, maybe replay the satisfaction failure, subject to
            the current diagnosis depth.
    
    gcc/testsuite/ChangeLog:
    
            * g++.dg/concepts/diagnostic1.C: Pass -fconcepts-diagnostics-depth=2.
            * g++.dg/concepts/diagnostic5.C: Adjust expected diagnostics.
            * g++.dg/cpp2a/concepts-iconv1.C: Pass -fconcepts-diagnostics-depth=2.
            * g++.dg/cpp2a/concepts-requires5.C: Likewise.

Diff:
---
 gcc/cp/ChangeLog                                |  4 ++++
 gcc/cp/constraint.cc                            | 28 +++++++++++++++++--------
 gcc/testsuite/ChangeLog                         |  5 +++++
 gcc/testsuite/g++.dg/concepts/diagnostic1.C     |  1 +
 gcc/testsuite/g++.dg/concepts/diagnostic5.C     |  5 +----
 gcc/testsuite/g++.dg/cpp2a/concepts-iconv1.C    |  1 +
 gcc/testsuite/g++.dg/cpp2a/concepts-requires5.C |  2 +-
 7 files changed, 32 insertions(+), 14 deletions(-)

diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index a65ed141478..be67685d0c2 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,9 @@
 2020-03-28  Patrick Palka  <ppalka@redhat.com>
 
+	* constraint.cc (diagnose_compound_requirement): When diagnosing a
+	compound requirement, maybe replay the satisfaction failure, subject to
+	the current diagnosis depth.
+
 	* constraint.cc (finish_constraint_binary_op): Set the location of EXPR
 	as well as its range, because build_x_binary_op doesn't always do so.
 	(current_constraint_diagnosis_depth): New.
diff --git a/gcc/cp/constraint.cc b/gcc/cp/constraint.cc
index 76c520318c3..571c7cbdd38 100644
--- a/gcc/cp/constraint.cc
+++ b/gcc/cp/constraint.cc
@@ -3308,20 +3308,30 @@ diagnose_compound_requirement (tree req, tree args, tree in_decl)
 	  if (!type_deducible_p (expr, type, placeholder, args, quiet))
 	    {
 	      tree orig_expr = TREE_OPERAND (req, 0);
-	      inform (loc, "%qE does not satisfy return-type-requirement",
-		      orig_expr);
-
-	      /* Further explain the reason for the error.  */
-	      type_deducible_p (expr, type, placeholder, args, noisy);
+	      if (diagnosing_failed_constraint::replay_errors_p ())
+		{
+		  inform (loc,
+			  "%qE does not satisfy return-type-requirement, "
+			  "because", orig_expr);
+		  /* Further explain the reason for the error.  */
+		  type_deducible_p (expr, type, placeholder, args, noisy);
+		}
+	      else
+		inform (loc, "%qE does not satisfy return-type-requirement",
+			orig_expr);
 	    }
 	}
       else if (!expression_convertible_p (expr, type, quiet))
 	{
 	  tree orig_expr = TREE_OPERAND (req, 0);
-	  inform (loc, "cannot convert %qE to %qT", orig_expr, type);
-
-	  /* Further explain the reason for the error.  */
-	  expression_convertible_p (expr, type, noisy);
+	  if (diagnosing_failed_constraint::replay_errors_p ())
+	    {
+	      inform (loc, "cannot convert %qE to %qT because", orig_expr, type);
+	      /* Further explain the reason for the error.  */
+	      expression_convertible_p (expr, type, noisy);
+	    }
+	  else
+	    inform (loc, "cannot convert %qE to %qT", orig_expr, type);
 	}
     }
 }
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index f60813f1d26..e2e00f4c2b4 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
 2020-03-28  Patrick Palka  <ppalka@redhat.com>
 
+	* g++.dg/concepts/diagnostic1.C: Pass -fconcepts-diagnostics-depth=2.
+	* g++.dg/concepts/diagnostic5.C: Adjust expected diagnostics.
+	* g++.dg/cpp2a/concepts-iconv1.C: Pass -fconcepts-diagnostics-depth=2.
+	* g++.dg/cpp2a/concepts-requires5.C: Likewise.
+
 	* g++.dg/concepts/diagnostic2.C: Expect "no operand" instead of
 	"neither operand".
 	* g++.dg/concepts/diagnostic5.C: New test.
diff --git a/gcc/testsuite/g++.dg/concepts/diagnostic1.C b/gcc/testsuite/g++.dg/concepts/diagnostic1.C
index 7da08db2792..c6589e2e671 100644
--- a/gcc/testsuite/g++.dg/concepts/diagnostic1.C
+++ b/gcc/testsuite/g++.dg/concepts/diagnostic1.C
@@ -1,6 +1,7 @@
 // PR c++/67159
 // { dg-do compile { target c++17_only } }
 // { dg-options "-fconcepts" }
+// { dg-additional-options "-fconcepts-diagnostics-depth=2" }
 
 template <class T, class U>
 concept bool SameAs = __is_same_as(T, U);
diff --git a/gcc/testsuite/g++.dg/concepts/diagnostic5.C b/gcc/testsuite/g++.dg/concepts/diagnostic5.C
index 2641dc18423..0d890d6f548 100644
--- a/gcc/testsuite/g++.dg/concepts/diagnostic5.C
+++ b/gcc/testsuite/g++.dg/concepts/diagnostic5.C
@@ -4,8 +4,7 @@
 template<typename T>
   concept c1 = requires { typename T::blah; };
 // { dg-message "satisfaction of .c1<T>. .with T = char." "" { target *-*-* } .-1 }
-// { dg-message "satisfaction of .c1<char\\*>." "" { target *-*-* } .-2 }
-// { dg-message ".typename T::blah. is invalid" "" { target *-*-* } .-3 }
+// { dg-message ".typename T::blah. is invalid" "" { target *-*-* } .-2 }
 
 template<typename T>
   concept c2 = requires (T x) { *x; };
@@ -27,8 +26,6 @@ template<typename T>
   concept c5 = requires (T x) { { &x } -> c1; };
 // { dg-message "satisfaction of .c5<T>. .with T = char." "" { target *-*-* } .-1 }
 // { dg-message "in requirements with .char x." "" { target *-*-* } .-2 }
-// { dg-message "does not satisfy return-type-requirement" "" { target *-*-* } .-3 }
-// { dg-error "deduced expression type does not satisfy" "" { target *-*-* } .-4 }
 
 template<typename T>
   requires (c1<T> || c2<T>) || (c3<T> || c4<T>) || c5<T> // { dg-message "49: no operand" }
diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-iconv1.C b/gcc/testsuite/g++.dg/cpp2a/concepts-iconv1.C
index 4d521c30748..4e2d13f8eb3 100644
--- a/gcc/testsuite/g++.dg/cpp2a/concepts-iconv1.C
+++ b/gcc/testsuite/g++.dg/cpp2a/concepts-iconv1.C
@@ -1,5 +1,6 @@
 // PR c++/67240
 // { dg-do compile { target c++2a } }
+// { dg-additional-options "-fconcepts-diagnostics-depth=2" }
 
 template <class T, class U> concept Same = __is_same_as(T,U);
 
diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-requires5.C b/gcc/testsuite/g++.dg/cpp2a/concepts-requires5.C
index 133d29e45a4..2f912b13d6a 100644
--- a/gcc/testsuite/g++.dg/cpp2a/concepts-requires5.C
+++ b/gcc/testsuite/g++.dg/cpp2a/concepts-requires5.C
@@ -1,5 +1,5 @@
 // { dg-do compile { target c++2a } }
-// { dg-additional-options -fconcepts-ts }
+// { dg-additional-options "-fconcepts-ts -fconcepts-diagnostics-depth=2" }
 
 // Test conversion requirements (not in C++20)


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2020-04-16 22:43 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-16 22:43 [gcc(refs/users/meissner/heads/ieee)] c++: Respect current_constraint_diagnosis_depth in diagnose_compound_requirement Michael Meissner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).