c++: using in diagnostics [PR102987]

The decl pretty-printing code wasn't looking at the flags parameter, so we
were printing 'using' in the middle of an expression.

	PR c++/102987

gcc/cp/ChangeLog:

	* error.cc (dump_decl) [USING_DECL]: Respect flags.

gcc/testsuite/ChangeLog:

	* g++.dg/diagnostic/using1.C: Check pretty-printing.
This commit is contained in:
Jason Merrill 2022-04-14 17:35:35 -04:00
parent ac5b356d05
commit a0a2554d7c
2 changed files with 12 additions and 7 deletions

View File

@ -1439,16 +1439,20 @@ dump_decl (cxx_pretty_printer *pp, tree t, int flags)
case USING_DECL:
{
pp_cxx_ws_string (pp, "using");
tree scope = USING_DECL_SCOPE (t);
if (flags & TFF_DECL_SPECIFIERS)
pp_cxx_ws_string (pp, "using");
bool variadic = false;
if (PACK_EXPANSION_P (scope))
if (!(flags & TFF_UNQUALIFIED_NAME))
{
scope = PACK_EXPANSION_PATTERN (scope);
variadic = true;
tree scope = USING_DECL_SCOPE (t);
if (PACK_EXPANSION_P (scope))
{
scope = PACK_EXPANSION_PATTERN (scope);
variadic = true;
}
dump_type (pp, scope, flags);
pp_cxx_colon_colon (pp);
}
dump_type (pp, scope, flags);
pp_cxx_colon_colon (pp);
dump_decl (pp, DECL_NAME (t), flags);
if (variadic)
pp_cxx_ws_string (pp, "...");

View File

@ -7,6 +7,7 @@ struct a {
template <typename c> struct d : c {
using c::e;
using f = d;
// { dg-message "decltype .c::e" "" { target *-*-* } 0 }
constexpr int g(decltype(e.b())) { return buh; } // { dg-error "buh" }
};
struct h {