Commit 91f4fc40 by Patrick Palka

c++: Improve dump_decl for standard concepts

This patch improves the pretty printing of standard concept definitions in error
messages.  In particular, standard concepts are now printed qualified whenever
appropriate, and the "concept" specifier is printed only when the
TFF_DECL_SPECIFIERS flag is specified.

In the below test, the first error message changes from
  9:15: error: ‘b’ was not declared in this scope; did you mean ‘concept b’?
to
  9:15: error: ‘b’ was not declared in this scope; did you mean ‘a::b’?

gcc/cp/ChangeLog:

	* error.c (dump_decl) [CONCEPT_DECL]: Use dump_simple_decl.
	(dump_simple_decl): Handle standard concept definitions as well as
	variable concept definitions.

gcc/testsuite/ChangeLog:

	* g++.dg/cpp2a/concepts6.C: New test.
parent 9053a18f
2020-02-12 Patrick Palka <ppalka@redhat.com>
* error.c (dump_decl) [CONCEPT_DECL]: Use dump_simple_decl.
(dump_simple_decl): Handle standard concept definitions as well as
variable concept definitions.
2020-02-10 Jakub Jelinek <jakub@redhat.com> 2020-02-10 Jakub Jelinek <jakub@redhat.com>
PR other/93641 PR other/93641
......
...@@ -1037,14 +1037,13 @@ dump_simple_decl (cxx_pretty_printer *pp, tree t, tree type, int flags) ...@@ -1037,14 +1037,13 @@ dump_simple_decl (cxx_pretty_printer *pp, tree t, tree type, int flags)
if (flags & TFF_DECL_SPECIFIERS) if (flags & TFF_DECL_SPECIFIERS)
{ {
if (VAR_P (t) && DECL_DECLARED_CONSTEXPR_P (t)) if (concept_definition_p (t))
{ pp_cxx_ws_string (pp, "concept");
if (DECL_LANG_SPECIFIC (t) && DECL_DECLARED_CONCEPT_P (t)) else if (VAR_P (t) && DECL_DECLARED_CONSTEXPR_P (t))
pp_cxx_ws_string (pp, "concept"); pp_cxx_ws_string (pp, "constexpr");
else
pp_cxx_ws_string (pp, "constexpr"); if (!standard_concept_p (t))
} dump_type_prefix (pp, type, flags & ~TFF_UNQUALIFIED_NAME);
dump_type_prefix (pp, type, flags & ~TFF_UNQUALIFIED_NAME);
pp_maybe_space (pp); pp_maybe_space (pp);
} }
if (! (flags & TFF_UNQUALIFIED_NAME) if (! (flags & TFF_UNQUALIFIED_NAME)
...@@ -1296,8 +1295,7 @@ dump_decl (cxx_pretty_printer *pp, tree t, int flags) ...@@ -1296,8 +1295,7 @@ dump_decl (cxx_pretty_printer *pp, tree t, int flags)
break; break;
case CONCEPT_DECL: case CONCEPT_DECL:
pp_cxx_ws_string (pp, "concept"); dump_simple_decl (pp, t, TREE_TYPE (t), flags);
dump_decl_name (pp, DECL_NAME (t), flags);
break; break;
case WILDCARD_DECL: case WILDCARD_DECL:
......
2020-02-12 Patrick Palka <ppalka@redhat.com>
* g++.dg/cpp2a/concepts6.C: New test.
2020-02-10 David Malcolm <dmalcolm@redhat.com> 2020-02-10 David Malcolm <dmalcolm@redhat.com>
PR analyzer/93350 PR analyzer/93350
......
// { dg-do compile { target c++2a } }
namespace a
{
template<typename = int>
concept b = true; // { dg-message ".a::b. declared here" }
}
static_assert(b); // { dg-error "did you mean .a::b." }
namespace c
{
template<typename>
concept b = true; // { dg-message "concept c::b." }
template<typename>
concept b = true; // { dg-error "concept c::b." }
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment